深圳网站有哪些内容,深圳网站建设599元全包,.net网站做增删改,网站案例介绍本系列共涉及4个框架#xff1a;Sping,SpringBoot,Spring MVC,Mybatis。
博客涉及框架的重要知识点#xff0c;根据序号学习即可。 目录
本系列共涉及4个框架#xff1a;Sping,SpringBoot,Spring MVC,Mybatis。
博客涉及框架的重要知识点#xff0c;根据序号学习即可。 …本系列共涉及4个框架Sping,SpringBoot,Spring MVC,Mybatis。
博客涉及框架的重要知识点根据序号学习即可。 目录
本系列共涉及4个框架Sping,SpringBoot,Spring MVC,Mybatis。
博客涉及框架的重要知识点根据序号学习即可。
1、重要标签
1.1动态SQL
1.2 其他 2、#{}与${}的区别
2.1 #{}与${}的使用
2.2 #{}与${}的区别 3、配置文件
3.1 配置日志
3.2 配置大驼峰
3.3配置映射文件路径 4、数据库连接池
4.1 什么是数据库连接池
4.2 使用 5、MySQL数据库开发企业规范
5.1 表名规范
5.2 表的设计规范
5.3 表的查询 1、重要标签
1.1动态SQL
1动态SQL是MyBatis的强大特性之一能够完成不同条件下不同的sql拼接
2if标签
①当某个字段是必填字段或非必填字段时如果有不确定的字段传入那么程序应该如何实现——使用if标签对字段做出判断
②例子
a、接口定义 Integer insertUserByCondition(UserInfo userInfo); b、Mapper.xml实现
【对gender字段进行非空校验】
insert idinsertUserByConditioninsert into userinfo(username,password,age,if testgender !null gender, /if phone)values(#{username},#{password},#{age},if testgender !null #{gender}, /if #{phone})/insert
c、注解方式
直接把上面的内容使用script/script标签括起来就可以了非常不推荐
3trim标签
①上述的插入用户的功能只是有一个gender字段可能是选填项如果有多个字段一般考虑使用标签结合标签对多个字段都采取动态生成的方式
②标签中由如下属性
prefix表示整个语句块以prefix的值作为前缀
suffix表示整个语句块以suffix的值作为后缀
prefixOverrides表示整个语句块要去除掉的前缀
suffixOverrides表示整个语句块要去除掉的后缀
③调整上述的Mapper.xml
insert idinsertUserByConditioninsert into userinfotrim prefix( suffix) suffixOverrides,if testusername !null username, /if if testpassword !null password, /if if testage !null age, /if if testgender !null gender, /if if testphone !null phone /if/trimvaluestrim prefix( suffix) suffixOverrides,(#{username},#{password},#{age},if testusername !null #{username}, /ifif testpassword !null #{password}, /ifif testage !null #{age}, /if if testgender !null #{gender}, /ifif testphone!null #{phone}/if )/trim/insert4where标签
①根据属性做where条件查询时可以使用where标签
②例子
a、接口定义 ListUserInfo queryByCondition(); b、Mapper.xml实现
select idqueryByCondition resultTypeUserInfoselect id,username,age,gender,phone,delete_flagfrom userinfowhereif testusername ! null and name #{username},/ifif testage ! nulland age #{age},/ifif testdelete_flag ! nulland delete_flag #{deleteFlag},/if/where
/select 5set标签
①根据传入的属性来更新数据可以使用标签来指定动态内容
②例子
a、接口定义 Integer updateUserByCondition(UserInfo userInfo) b、Mapper.xml实现
update idupdateUserByConditionupdate userinfosetif testusername ! null name #{username},/ifif testage ! null age #{age},/ifif testdelete_flag ! null delete_flag #{deleteFlag},/if/setwhere id #{id}/update ③set动态的在SQL语句中插入set关键字并会删除额外的逗号用于更新语句中这个标签也可以使用trim prefixset suffixOverrides,替换 6foreach标签
①对集合进行遍历可以使用该标签。标签有如下属性
collection绑定方法参数中集合如ListSetMap或数组对象
item遍历时的每一个对象
open语句块开头的字符串
close语句块结束的字符串
separator每次遍历之间间隔的字符串
②例子
a、接口定义 void deleteById(ListInteger ids); b、Mapper.xml实现
delete iddeleteByIdsdelete from userinfo where id inforeach collectionids itemid separator, open( close)#{id}/foreach/delete 7include标签
①在xml映射文件中配置的SQL有时会存在很多重复的片段此时就会有很多冗余的代码我们可以将重复的代码进行抽取通过sql标签封装SQL片段然后在通过include标签进行引用
②sql定义可重用的的SQL片段
include通过属性refid指定包含的SQL片段
③例子
sql idcommonSelectselect id,name,gender,birthday from student
/sql!--根据id查询学生--select idgetById resultTypeorg.fanhuiling.pojo.Studentinclude refidcommonSelect/includewhere id#{id}/select 1.2 其他 2、#{}与${}的区别
2.1 #{}与${}的使用
1使用Integer作为参数 ① #{ }为参数赋值 Select(select username,password,age,gender,phone from userinfo where id#{ }) UserInfo queryById(Integer id); 打印SQL语句日志如下 select username,password,age,gender,phone from userinfo where id? 我们输入的参数id 并没有在后面拼接而是使用进行占位这种就称为预编译SQL ② ${ }为参数赋值 Select(select username,password,age,gender,phone from userinfo where id${ }) UserInfo queryById(Integer id); 打印SQL语句日志如下 select username,password,age,gender,phone from userinfo where id1 我们输入的参数1就直接与SQL语句进行了拼接 2使用String作为参数 ① #{ }为参数赋值 Select(select username,password,age,gender,phone from userinfo where username#{ }) UserInfo queryByName(String name); 打印SQL语句日志如下 select username,password,age,gender,phone from userinfo where username? ② ${ }为参数赋值 Select(select username,password,age,gender,phone from userinfo where username${ }) UserInfo queryByName(String name); 打印SQL语句日志如下 select username,password,age,gender,phone from userinfo whereusernamezhansan 我们输入的参数zahnsan拼接在SQL 语句后了但是这样操作会报错因为zhangsan是字符串在SQL语句中应该用引号包裹然而使用${ }不会拼接单引号 所以程序会报错。不过可手动添加引号不推荐 2.2 #{}与${}的区别
1#{ }使用的是预编译SQL通过占位的方式提前对SQL进行编译然后把参数填充到SQL语句中#{ }会根据出纳书类型自动拼接单引号
2 ${ }会直接进行字符串替换一起对SQL进行编译。如果参数为字符串类型需要手动添加上引号
3#{ }是预编译SQL而${ }是即时SQL
4更推荐使用预编译SQL一是性能更高【预编译SQL编译一次后就会把SQL语句给缓存起来后面需要再次使用该SQL语句时不会再次编译只是输入的参数不同罢了省去了解析优化的过程以此来提高效率】二是更安全【防止SQL注入正常情况下where nameadmin是可以正常登录的但是将admin改成 or 11 》where name or 11始终为真也可以登录这就是SQL注入的典型例子】 3、配置文件
3.1 配置日志 # 配置 mybatis 的日志指定输出到控制台 mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl 3.2 配置大驼峰 # 开启 mybatis 的驼峰命名自动映射开关 mybatis.configuration.map-underscore-to-camel-casetrue 3.3配置映射文件路径 # 配置 mybatis 的映射文件路径需要修改成对应值 mybatis.mapper-locationsclasspath*:mapper/*.xml 4、数据库连接池
4.1 什么是数据库连接池
1数据库连接池负责分配、管理和释放数据库连接它允许应用程序重复使用一个现有的数据库连接池而不是重新创建一个新的 ①无连接池每次执行SQL语句要先创还能一个新的连接对象然后执行SQL语句SQL语句执行完再关闭连接对象释放资源这种重复的创建连接、销毁连接比较消耗资源
②有连接池程序启动时会在数据库连接池中创建一定数量的Connection对象当客户请求数据库连接池会从数据库连接池中获取Connection对象然后执行SQL、SQL语句执行完毕后再把Connection归还给连接池
2作用使用数据库连接池避免频繁的创建连接销毁连接
3优点减少了网络开销资源重用提升了系统的性能
4.2 使用
1常见的数据库连接池C3P0、DBCP、Druid、Hikari
2目前比较流行的是Druid、HikariSpringBoot默认是Hikari日本研发的, 大NO特NO咱们还是使用优秀的阿里巴巴开发的Druid连接池吧直接在pom.xml文件里面添加相应依赖即可使用
dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.17/version/dependency 5、MySQL数据库开发企业规范
5.1 表名规范
1表名字段名使用小写字母或数字单词之间用下划线分割。尽量避免出现数字开头或者两个下划线中间只出现数字。数据库字段名的修改代价很大所以字段名是需要慎重考虑的
2MySQL在Windows下不区分大小写但是在Linux下默认是区分大小写的所以最好数据库名表名字段名都是小写
5.2 表的设计规范
1在表的设计中除了实体需要的字段名之外还需要必备的三字段id、create_time、update_time【id为自增主键步长为1create_time、update_time的类型均为datetimecreate_time为创建时间update_time为更新时间】
2有同等含义的字段即可字段名不做强制要求
5.3 表的查询
在表的查询中避免使用*作为查询的字段列表select * 是一个非常危险的操作当数据量特别大的时候还没有查询完内存就占满了真的真的特别危险所以在查询时最好表明需要哪些字段