MyBatis快速入门
刚刚开始做项目的时候呀,老是用jdbcTemplate来实现dao层与数据库的交互,但是那样确实是与代码耦合了,那么想要解决耦合问题呢。
那当然是要选择 配置文件 啦,所有我们来学习学习mybatis的快速入门吧,当然啦,他可不是配置文件哈,啊哈哈哈
MyBatis作为dao层的框架还是超级好用的哦,那么我们来看看他的开发吧
只需要六步,就能玩转MyBatis啦
- 先来添加MyBatis的坐标吧,emmm就是导入依赖啦
- 第二就是要去创建一个数据表拉,这个我搞个user来演示哈
- 编写user实体类哦
- 到这里就是重点拉,编写映射文件哦,
- 编写核心文件,这个划重点呢
- 最后就是测试拉,我们最后搞个测试类,来看看就行了,
一、导入依赖
- 依赖直接放到 pom.xml 里面就行哦,核心的需要这两个就行了
- 最后那个测试的时候需要哒
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
二、在数据库里建数据表
- 这个没啥好说的哈,我直接建个user搞三个字段 id,username,password就行了哈
- 然后随便搞点数据进去,方便我们的测试
- 这里给上建表语句哈
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
三、编写user实体类
- 建立一个简单javaBean就行拉,不用太复杂
- 记得搞他的getter和setter方法,还是tostring方法哦
package junmu.domain;
public class User {
private int id;
private String username;
private String password;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
四、编写映射文件
- 重点来了,兄弟们,这个里面放的就是我们的自己写的 SQL 语句拉,
- 不同类型的语句要使用不同类型的标签哦
- 这里我叫叫做userMapper了哈,使用的是dtd约束,不懂的可以回去看看xml详解哈
- 然后调用里面的sql语句也很简单的,直接 userMapper.findAll
- 就是使用 namespace.id 的形式来调用,后面会说哦
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="userMapper">
<select id="findAll" resultType="user">
select * from user
</select>
<insert id="save" parameterType="junmu.domain.User">
insert into user values(#{id},#{username},#{password})
</insert>
<update id="update" parameterType="junmu.domain.User">
update user set username=#{username},password=#{password} where id=#{id}
</update>
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>
</mapper>
五、编写核心文件
- 这个估计就是最重要的了,里面的xml标签是要求都会哦
- 先来看看代码吧
<?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标签加载外部properties文件-->
<properties resource="jdbc.properties"/>
<!--自定义别名-->
<typeAliases>
<typeAlias type="junmu.domain.User" alias="user"/>
</typeAliases>
<!--数据源环境-->
<environments default="developement">
<environment id="developement">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="junmu/mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 我们依次来说说哈!
- properties 标签,这个就是用到导入外部数据的这个没给出来哈,啊哈哈哈哈
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/day14?characterEncoding=utf-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
initialSize=5
maxActive=10
maxWait=3000
filters=stat
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
- 就是这个拉,properties 标签就可以导入这些数据拉,然后用法也很简单,使用 ${数据名} 就可以调用了
- 然后我们在看看 typeAliases 标签,这个标签就是用来定义别名的,当我们的类型特别长的时候,我们就可以使用这个,然后变的很短,然后在映射文件里面使用
- environments 标签用于定义环境,就是JDBC什么什么的,还是配置里面的数据环境呀。
- mappers 标签,这个用来加载上面那个映射文件,绑定在一起
七、编写测试类
- 好了,到这里,我们就可来实验实验我们的MyBatis是否可以用了哈,
- 因为,这里是讲MyBatis入门,我们就先以客户端的形式来编写拉,不然还要配其他无关的知识。。
- 先放代码吧
public class MyBatisTest {
@Test
public void test1() throws IOException {
// 获取核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 获取sql session 工厂对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 获取session会话对象
SqlSession sqlSession = build.openSession();
// 执行操作 参数:namespace + id
List<User> list = sqlSession.selectList("userMapper.findAll");
// 打印
for (User user : list) {
System.out.println(user);
}
// 释放资源
sqlSession.close();
}
}
- 前面三句就是获取 sqlSession 的哈,这玩意就是MyBatis的客户端,了解下就可以了,反正以后也不用写,获取之后呢,我们就可以使用sqlSession来进行操作了
- 然后我们来看看他的 api 使用哈
- 对于不同的语句有不同的操作哦
- 比如查询,我们使用selectone 或者selectlist
List<User> list = sqlSession.selectList("userMapper.findAll");
- 修改操作的时候,我们使用update
User user = new User();
user.setId(7);
user.setUsername("刑天铠甲");
user.setPassword("999");
sqlSession.update("userMapper.update",user);
sqlSession.commit();
- 咳咳,这个有个坑哈,对于要修改数据内容的,要进行事务的提交哈
- 因为MyBatis里,默认是不自动提交的哦,这就很烦~
- 然后可以在build.openSession();的时候里面设置成true
SqlSession sqlSession = build.openSession(true);
- 这样就表示他会自动提交了,就不用我们进行手动commit了
- 然后mybatis就入门拉,是不是很简单呢,嘿嘿,
- 哦哦哦,对了,注意哈,
- 在映射文件里面,要用 #{ } 来注入哈, 千万不要用 ${} 啊哈哈哈,怕某些人习惯了,改不过来。