Mybatis是一款支持复杂的SQL语句,存储过程及高级映射的持久层的框架。使用Mybatis有两种方式,XML和注解。
SpringBoot+Mybatis注解版
Mybatis初期使用比较麻烦,需要很多配置文件、实体类、dao层映射、还有很多其他的配置。初期开发使用generator可以根据表结构自动生产实体类、dao层代码,这样是可以减轻一部分开发量;后期mybatis进行大量的优化,现在可以使用注解版本,自动管理dao层和配置文件。
mybatis-spring-boot-starte就是SpringBoot集成Mybatis的jar包,可以完全使用注解,无需配置文件,简单配置轻松上手。
01
在Maven pom.xml文件中加入Mybatis和MySQL的jar包
02
配置application.properties文件
springboot会自动加载spring.datasource.*相关配置,数据源就会自动注入到sqlSessionFactory中,sqlSessionFactory会自动注入到Mapper中。
在启动类中添加对mapper包扫描@MapperScan或者在每个Mapper类中增加上面添加注解@Mapper,推荐在启动类加注解,这样不用在每个Mapper类加注解。
03
开发Mapper
所有的sql都在注解上。
@Select 是查询类的注解,所有的查询均使用这个
@Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。
@Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值
@Update 负责修改,也可以直接传入对象
@delete 负责删除
更多方法请参考mybatis官方地址
http://www.mybatis.org/mybatis-3/zh/java-api.html
04
使用
启动项目成功在浏览器输入本机的地址。
源码中controler层有完整的增删改查,这里就不贴了。
常见问题
注意#和$的问题?
#方式能够很大程度防止sql注入,#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id"
$方式无法防止Sql注入,$将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id。$方式一般用于传入数据库对象,例如传入表名。
使用MyBatis排序时使用order by 动态参数时需要注意,用$而不是#。
#{} 这种取值是编译好SQL语句再取值
${} 这种是取值以后再去编译SQL语句
SpringBoot+Mybatis XML版本
xml版本保持映射文件的老传统,优化主要体现在不需要实现dao的是实现层,而是在映射的xml文件中找到相应的sql语句。
01
配置文件application.properties文件中增加配置
02
如图Mapper接口和Mapper XML的映射关系
03
Dao层
Dao层现在十分简洁,具体的sql语句都在mapper.xml文件中,具体代码我这里就不贴了。
04
使用
新增功能,在url页面的测试。
源码中controler层有完整的增删改查,这里就不贴了
注解和xml如何选择呢?
注解版适合简单快速的模式。
xml版比较适合大型项目,可以灵活的动态生成SQL,方便调整SQL。
GitHub地址
源码在这里
注解版:
https://github.com/xiaonongOne/springboot-mybatis-annotation
XML版:
https://github.com/xiaonongOne/springboot-mybatis-xml
原文地址:https://www.jianshu.com/p/88fad41aed37