1.导入maven依赖
现在基本上都是在maven导入依赖,应该没有人用jar包导入了吧,maven这个很简单,网上一搜就有。
2.mybatis.xml
第一配置运行环境
第二注册映射文件
<transactionManager type="JDBC"/>是注册事务管理器,这里一般是JDBC,不需要改动,不管你用的是Mysql还是Oracle。
<dataSource type="POOLED">数据库连接池技术,这个一般也是用的这个,mybatis总共支持三中,可以参考以下博客。
https://www.cnblogs.com/xunmengjun/p/14098794.htm
<?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> <properties resource="jdbc.properties"/> <typeAliases> <!-- <typeAlias type="com.gdufe.beans.Student" alias="student"/> --> <package name="com.gdufe.beans"/> </typeAliases> <!-- 配置运行环境 --> <environments default="testEM"> <environment id="testEM"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 注册映射文件 --> <mappers> <mapper resource="com/gdufe/dao/mapper.xml"/> </mappers> </configuration>
3.mapper.xml 定义映射文件
映射文件,简称mapper,主要完成Dao层中SQL语句的映射,一般放在Dao包。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="test"> <insert id="insertStudent" parameterType="com.gdufe.beans.Student"> insert into student(name,age,score) values(#{name},#{age},#{score}) </insert> </mapper>
上面的配置文件应该很容易就看懂了吧,就是一个命名这个insert的名字为insertStudent,还有涉及到的实体类的包。
这里的id要跟dao层里面的方法名一致。主配置文件mybatis.xml里面需要注册mapper.xml,详情请看mybatis.xml的最后几行配置。
4.Dao的实现
这里面很复杂,所以一般都会将getSessionFactory包装成一个对象。
public class StudentDaoImpl implements IStudentDao { private SqlSession sqlSession; @Override public void insertStu(Student student) { try { //1.加载主配置文件 InputStream inputStream = org.apache.ibatis.io.Resources. getResourceAsStream("mybatis.xml"); //2.创建SqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //3.创建SqlSession对象 sqlSession = sqlSessionFactory.openSession(); //4.相关操作 sqlSession.insert("insertStudent", student); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } finally { if(sqlSession != null){ sqlSession.close(); } } } }
需要commit(),添加的数据才会加进去到表里面,如果没有commit,数据id会被占用,但是不会插到表里面。
sqlSession.insert("insertStudent", student);
这里使用到的就是mapper.xml里面对insert方法的命名。
这里的namespace的名字就是在log4j.properties里面用到的(但是一般是写包名),不过实际开发中应该不会用到这个吧,就是简单地提一句。
log4j.properties
log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%-5p] %m%n log4j.logger.test=debug,console
5.@@identity
获得插入数据的id,拿到自增的主键值。就是在你执行insert的时候,返回一个自增值的当前值。比如你在插入前,自增值id是11,在你insert之后,id就是12了,它就会给你返回一个12。
6.字段名和属性名不一致
当在工作时,很多时候数据库和编码是分开的,数据库里面的数据名称和我写的mybatis.xml里面设置的字段不一致
这时候可以采取
查询字段使用别名解决
使用结果映射resultMap
7.特殊情况的查询
①利用map
创建一个map,然后在方法里面导入map,
#{}中可以放什么内容
1) 参数对象的属性
2) 随意的内容,此时的#{}是个占位符
3) 参数为map时的key
4) 参数为map时,若key所对应的value为对象,则可将该对象的属性放入
5) 参数的索引号
② 动态sql
加上了<where>标签
用相同的语句时,可以用一个id代替
多条件模糊查询
遍历条件的数组,foreach
遍历ArrayList
当ArrayList里面装的是对象
多条件查询
更为常用的方式
8.SpringBoot整合MyBatis
一般来说,在正常的使用当中,不需要这么复杂,在SpringBoot中的使用就特别的方便。以下简单说明一下是怎么使用的。
①首先在pom.xml导入maven依赖
②application.yml添加数据库的账号密码之类的东西
③application.properties 加入mapper路径
mybatis: #mapper配置文件 mapper-locations: classpath:mapper/*.xml
④定义mapper层(也叫做Dao)
记得用@Mapper(其实就是一个interface)
在mapper.xml里面的namespace里面写的就是对应这个dao层的包
⑤定义mapper.xml
定义SQL语句
⑥定义service
⑦定义serviceImpl
@Service("userService")
⑧真正使用
@Controller @RequestMapping("/admin") public class UserController { @Autowired private UserService userService; @PostMapping("/login") public void test(){ User user = userService.findUserByUsername(username); } }