MyBatis是一款基于JDBC来开发的持久层框架.
一、配置
spring: |
- 采用注释方式使用Mybatis
- @Mapper就是负责管理MyBatis代码的注解,他会生成一个对象交给spring.同时我们在定义的时候要使用接口.注意返回值要与SQL语句的返回对应起来,比如插入语句返回的是受影响语句的条数,要用Integer做返回值.可以没有但不能错.
@Mapper |
- 参数的传递: 如果只有一个参数那么参数的名字不重要会自动匹配,不过建议写成一样的.同时也可以使用@Param注解对参数重命名注解里的新名字与查询语句对应上就行.
@Select("select * from userinfo where id = #{id}") |
@Select("select * from userinfo where id = #{id}") |
同时如果参数是对象就要进行一些额外操作,首先参数作为对象不进行重命名的时候是可以正常传参的如果重命名了就要使用替代#{对象名.参数};
@Select("select * from userinfo where id = #{user.id}") |
当对象作为返回值的时候,MyBatis把返回的值根据名字,一一对应的赋值给返回值的对象,当名字不同的时候就不会进行赋值.但是java有java的命名规则,MySQL有MySQL的.此时我们就要做一些处理来告诉java或者告诉MySQL谁对应谁.这里有三种方法
a.要求MySQL返回的数据要用什么名字,也就是通过as修改
@Select("select username as zhangsan from userinfo") |
b.告诉MyBatis返回的结果谁对应谁,然后把返回的结果让根据这个对应关系填充进返回值.id表示把这个对应关系作为一个组,下一个语句想要就不用写里面的内容了而是写一个
@ResultMap(value = "res") |
@Results(id = "res" ,value = { |
c.虽然命名规则不同,但我们仔细观察还是有一定规律的,如果我们就可以直接告诉MyBatis我们要按照这个规定命名.
在mapper里配置这样一个规则.
mybatis: configuration: map-underscore-to-camel-case: true #配置驼峰⾃动转换 |
- 插入语句:要注意语句中的字符串要么用’引起来,要么用/”转义后引起来.也可以使用参数.
@Insert("insert into userinfo (username, `password`, age, gender, phone) values('zhaoliu','zhaoliu',19,1,'18700001234')") @Insert("insert into userinfo (username, `password`, age, gender, phone) values(#{username},'zhaoliu',19,1,'18700001234')") |
Insert默认返回受影响的行数,但在有些场景下需要自增主键这时我们可以使用@Option注解,注意这个主键并不是把返回值改成主键而是注入到你的参数中所以参数要是个对象且包含id这个属性,并提供get和set.
@Insert("insert into userinfo (username, `password`, age, gender, phone) " + @Test |
- Delete:通常数据时很重要的所以删除也只是逻辑上的删除,比如给他标识为已删除
@Delete("delete from userinfo where id = 1") |
- Update
@Update("update userinfo set username = 'lege' where id = 20") |
- 使用XML来使用MyBatis
- 选择语句,首先与什么语句无关,namespace的值是对应接口的全限定类名下面的语句的id对应的是方法名,resultType对应的是返回值的类型,如果是集合那就是集合里的元素的类型.
<mapper namespace="com.example.demo.Mapper.UserInfoMapperByXml"> |
- 插入语句,如果有参数其实是和注释里的语句写法一样的
<insert id="insert1" useGeneratedKeys="true" keyProperty="id"> |
- 删除语句
<delete id="delete1"> |
- 修改语句
@Test |
数据库连接池
减少创建与销毁的开销.
常见的数据库连接有池C3P0 DBCP Druid Hikari(SpringBoot默认的)