MyBatis学习笔记
1.学习前的准备工作
添加相关的依赖:可以通过下面这个网站搜索自己需要的依赖自行添加,这里用的是3.5.2版本
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
官方文档:可以选择语言
源码:
2.第一个Mybatis程序
思路:环境搭建–>导入Mybatis–>编写代码–>测试
2.1环境搭建
搭建数据库
create database `mybatis`;
use `mybatis`;
create table `user`(
`id` int(20) not null primary key,
`name` varchar(30) default null,
`pwd` varchar(30) default null
)engine=innodb default charset=utf8;
insert into `user` values
(1,'张三','123456'),
(2,'李四','123456'),
(3,'王五','123456')
新建项目
1.新建一个普通的maven项目,并删除他的src目录。
2.导入依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
3.新建子模块
4.在resources目录下添加配置文件mybatis-config.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
5.编写mybatis工具类
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static{
InputStream inputStream = null;
try {
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
2.2编写代码
-
实体类 User
public class User { private int id; private String name; private String pwd; public User(){ } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
-
Dao接口 UserDao
public interface UserDao { List<User> getUserList(); }
-
接口实现类由原来的UserDaoImpl变为UserMapper.xml
<?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="dao.UserDao"> <select id="getUserList" resultType="pojo.User"> select * from mybatis.user; </select> </mapper>
namespace的作用是绑定接口,相当于implements
id是方法名
resultType是返回的类型所对应的类
2.3代码测试
public class userDaoTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
//方式一:getMapper
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
//方式二:
//List<User> userList = sqlSession.selectList("dao.UserDao.getUserList");
for(User user:userList){
System.out.println(user);
}
sqlSession.close();
}
}
运行后报错
注意:编写完UserMapper.xml后要去核心配置文件mybatis-config.xml中注册
接着运行,接着报错
原因:maven项目导出资源文件失败
在pom.xml中添加以下配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
运行成功
3.CRUD
-
在接口中添加方法
public interface UserDao { List<User> getUserList(); User getUserById(int id); int addUser(User user); int updateUser(User user); int deleteUser(int id); }
-
在UserMapper中添加对应的标签
<?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="dao.UserDao"> <select id="getUserList" resultType="pojo.User"> select * from mybatis.user; </select> <select id="getUserById" resultType="pojo.User" parameterType="int"> select * from mybatis.user where id=#{id}; </select> <insert id="addUser" parameterType="pojo.User"> insert into mybatis.user(id, name, pwd) values (#{id},#{name},#{pwd}); </insert> <update id="updateUser" parameterType="pojo.User"> update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id}; </update> <delete id="deleteUser" parameterType="int"> delete from mybatis.user where id=#{id}; </delete> </mapper>
这里要注意标签的类型要和sql语句的一致,我一开始就是因为把所有的标签都写成了导致出错。
-
编写对应的测试方法
public class userDaoTest { @Test public void test(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); //方式一:getMapper UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList(); //方式二: //List<User> userList = sqlSession.selectList("dao.UserDao.getUserList"); for(User user:userList){ System.out.println(user); } sqlSession.close(); } @Test public void test2(){ SqlSession sqlSession=MybatisUtils.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); userDao.addUser(new User(4,"赵六","123456")); sqlSession.commit(); sqlSession.close(); } @Test public void test3(){ SqlSession sqlSession=MybatisUtils.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); userDao.updateUser(new User(4,"杨幂","654321")); sqlSession.commit(); sqlSession.close(); } @Test public void test4(){ SqlSession sqlSession=MybatisUtils.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); userDao.deleteUser(4); sqlSession.commit(); sqlSession.close(); } @Test public void test5(){ SqlSession sqlSession=MybatisUtils.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); User user = userDao.getUserById(2); System.out.println(user); sqlSession.close(); } }
注意点:1.增删改这三种操作需要提交事务
2.parameterType是参数类型,resultType是返回值类型。