一.MyBatis的基本使用
1.先创建maven工程
先创建一个空的工程
进入当前项目之后,进行配置配置Project SDK为1.8,Project language level也是8
接下来设置当前项目的一个maven,点击这个项目的settings,设置maven配置文件、本地仓库
创建maven
编写配置文件pom.xml引入相关依赖
2.创建MyBatis的核心配置文件
在resources中创建好mybatis-config.xml文件后,在mybatis官网复制如下代码到文件中并修改
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置连接数据库的环境--> <environments default="development"> <environment id="development"> <!-- 当前的事务管理器类型--> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- 驱动名称--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!-- 连接地址,mybatis为要连接的数据库--> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <!-- 数据库用户名--> <property name="username" value="root"/> <!-- 密码--> <property name="password" value="*******"/> </dataSource> </environment> </environments> <!-- 引入映射文件--> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
3.创建mapper接口
创建mapper接口,去调用mapper接口中的某个方法就会自动对应某个sql语句
创建数据库后,创建实体类对象,创建的实体类对象保证字段名和属性名一致,查询出来的数据会把字段名作为当前的属性名并为其赋值
设置set和get方法,有参和无参构造
创建mapper接口来代替原来的DAO,mybatis中有面向接口的编程,每当调用接口中的方法就会自动去匹配一个sql语句去自动执行
实现添加一个用户信息,增删改的返回值是受影响的行数,返回值为int,在调用这个方法的时候会去执行一个sql,sql语句是写在映射文件中的
4.创建MyBatis的映射文件
创建好映射文件后,在mybatiws官网使用手册复制如下代码到映射文件中
引入映射文件在mybatis-config.xml中
5.测试添加功能
在创建一个MyBatisTest类
MyBatis提供了操作数据库的一个会话对象SqlSession,获取SqlSession对象
6.修改功能
7.查询功能
根据id来查询用户信息,返回值类型为User
查询功能的标签必须设置resultType或者resultMap
resultType:结果类型,设置默认映射关系,把当前查询出来的结果的字段名作为属性名,来为当前这个类型中的属性进行赋值,如果能匹配到则赋值,不能匹配到就不赋值
resultMap:结果映射,设置自定义映射关系,如果字段名和属性名不一致采用resultMap
查询多条记录
8.连接数据库的信息可以放在一个properties文件中
在resources中创建一个名为jdbc.properties文件
配置文件写完后将配置文件导入到mybatis.config.xml中
9.类型别名typeAliases
在UserMapper.xml中都可以用别名
10.mappers标签
映射文件多了之后可以以包为单位引入
二.MyBatis获取参数值的两种方式
1.单个字面量获取参数
e:根据id查询信息
#{id},这个id叫什么都可以,名字不重要,和位置有关系
#
如果要用${}的方式,要手动添加单引号不是双引号
2.多个字面量获取参数
根据name和pwd获取信息
在mybatis的底层如果监测到有多个参数,它会自动把参数放在一个map集合里面,这个map集合中会以两种方式存储,以arg0,arg1,arg3.....或param1,param2,param3....
3.若mapper接口方法参数有多个时,手动将这些参数放在一个map中
4.mapper接口方法的参数是一个实体类类型的参数
添加一个用户信息
直接通过这个实体类的属性名获取值
5.命名参数,使用@param注解来命名参数
三.MyBatis的各种查询
1.查询一个实体类对象,可以通过实体类对象或者List集合接收
2.查询多条记录,多条记录用一个List集合来接收
3.根据id查询用户信息为一个map集合
4.查询多个用户信息为map集合
5.模糊查询
模糊查询建议用${}
如果用#{}
sql语句要这样写,通过mysql里面concat()来拼接字符串
还可以用这种方式
6.批量删除
批量删除只能用${}
7.动态通过表名查询
只能用${}
8.添加功能获取自增的主键
获取自动增长的主键?
当执行这个sql语句后这个id的值就有了通过getid方法获取
四.字段名和属性名不一致情况
三种解决方案
1.表中的字段与实体类中的属性不符合时,可以通过给字段设置别名使它和实体类中的属性一致
2.通过全局配置解决字段名和属性名的映射关系
3.通过resultMap来解决
property=属性值,column=字段名
五.多对一的映射关系
1.级联属性赋值
多对一时创建一所对应的对象
设置get和set方法
2.通过association标签
3.通过分布查询
六.动态sql
1.if标签
没有传输这个数据服务器中传输的就是null或者空字符串
if中的条件不满足不会拼接到其中
2.where标签
动态生成where,如果第一个条件不成立会去掉第二个if里面的and
如果条件都不成立就不会生成where
3.trim标签
标签中if条件都不成立trim标签无任何作用
4.choose,when,otherwise标签
相当于java中的if...else if.....else
如果when都不成立执行otherwise,有一个成立,后面都不执行
5.foreach标签
批量删除
这个eid是个数组,传进去的参数为一个数组
separator是以什么分隔
6.sql标签
七.mybatis的缓存
1.mybatis的一级缓存
2.二级缓存
3.第三方缓存EHCache
八.mybatis的逆向工程
1.创建逆向工程的步骤
单击它
这是简洁版的使用
复杂版
改成MyBatis3