一:Mybatis的简介
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
二:Mybatis的入门
思路:搭建环境:导入mybatis包---->编写代码----->测试
2.1 搭建环境
1.创建数据库:
2.构建maven项目---->导入依赖
<!--导入依赖-->
<dependencies>
**mysql连接**
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
**mybatis依赖**
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
**junit测试**
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
</dependencies>
2.2编写模板代码
1.创建配置文件: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?serverTimezone=UTC&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>**
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/chen/UserDao/UserMapper.xml"/>
</mappers>
</configuration>
2.编写工具类MyBatisUtils
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//既然有了 SqlSessionFactory,我们可以从中获得 SqlSession 的实例。
//SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
//可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
3.创建接口
public interface UserMapper {
//查询所有用户
List<User> getUserList();
//根据id查询用户
User getUserById(int id);
//模糊查询
List<User> getUserLike(String value);
//增加用户
int addUser(User user);
//删除用户
int deleteUser(int id);
//修改用户
int upDateUser(User user);
}
4.通过 XML 定义SQL语句
<?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">
<!--namespace工作空间->即接口,deleteUser,resultType返回的结果-->
<mapper namespace="com.chen.UserDao.UserMapper">
<!--select 查询时要有返回的结果-->
<select id="getUserList" resultType="com.chen.pojo.User">
select * from mybatis.user;
</select>
<select id="getUserById" parameterType="int" resultType="com.chen.pojo.User">
select * from mybatis.user where id=#{id}
</select>
<select id="getUserLike" resultType="com.chen.pojo.User">
select * from mybatis.user where name like "%"#{value}"%";
</select>
<!--增删改可以没有resultType-->
<!--parameterType 参数类型-->
<insert id="addUser" parameterType="com.chen.pojo.User">
insert into mybatis.user (id,name,password)
values (#{id},#{name},#{password})
</insert>
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id=#{id};
</delete>
<update id="upDateUser" parameterType="com.chen.pojo.User">
update mybatis.user set name=#{name},password=#{password} where id=#{id};
</update>
2.3 测试:采用junit测试方法
@Test
public void getUserListTest(){
//方式一
//获取sqlSession对象
SqlSession sqlSession = MyBatisUtils.getSqlSession();
//映射到在命名空间中同名的映射器类
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//将已映射的 select 语句匹配到对应名称、参数和返回类型的方法
List<User> userList = mapper.getUserList();
//方式二
// List<User> userList = sqlSession.selectList("com.chen.UserDao.UserMapper.getUserList");
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void getUserByIdTest(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
@Test
public void getUserLikeTest(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserLike("李");
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
//增删改需要提交事务
public void addUserTest(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.addUser(new User(4,"陈少","123"));
//提交事务
sqlSession.commit();
sqlSession.close();
}
@Test
//增删改需要提交事务
public void upDateUserTest(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.upDateUser(new User(4,"呵呵","4444444"));
//提交事务
sqlSession.commit();
sqlSession.close();
}
@Test
//增删改需要提交事务
public void deleteUserTest(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.deleteUser(4);
//提交事务
sqlSession.commit();
sqlSession.close();
}
6.出现的问题
6.1.导出资源失败:在pom.xml中配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>