一丶MyBatis介绍
MyBatis是支持普通Sql查询,存储过程和高级映射的优秀的持久层框架。它消除了几乎所有的JDBC代码和参数的手工设置以及对于结果集的检索封装。MyBatis可以使用简单的XML映射文件或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录。并且MyBatis是一个半自动框架,需要写sql语句。
二丶关于MyBatis的搭建
①创建一个Maven工程
②在pom.xml文件中引入依赖
<dependencies>
//关于MySQL驱动的依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
//关于MyBatis的依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
//关于lombok的依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
</dependencies>
②在resource下创建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">
//创建MyBatis的配置文件
<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/ceshi" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
//将映射的文件加载到配置文件中
<mappers>
<mapper resource="mapper/userMapper.xml"/>
</mappers>
</configuration>
③在resource下创建映射文件(用于写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">
<mapper namespace="com.lp.dao.UserDao">
//<select:表示查询标签:用于存放查询的sql语句>
//id:唯一标识
//resultType:查询结束后返回的数据类型
<select id="getUser" resultType="com.lp.entity.User">
select * from user
</select>
//<insert:表示新增标签:用于存放新增的sql语句>
//resultType:新增的返回数据类型可以不写,默认为int类型
<insert id="addUser" >
insert into user (username,pword) values(#{username},#{pword})
</insert>
//<update:表示修改标签:用于存放修改的sql语句>
//resultType:和新增的返回数据类型一样,可以不写,默认为int类型
<update id="updateUser">
update user set username=#{username},pword=#{pword} where id=#{id}
</update>
//<delete:表示删除标签:用于存放删除的sql语句>
//resultType:和新增,修改的返回数据类型一样,可以不写,默认为int类型
<delete id="deleteUser">
delete from user where id=#{id}
</delete>
④测试
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String username;
private String pword;
}
测试类
public static void main(String[] args){
//读取MyBatis的配置文件 mybatisconfig.xml
Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
//获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql
List<User> user=sqlSession.selectList("getUser");
//控制台输出
System.out.println(user);
}
三丶可以使用getMapper调用Dao层的方法
实现代码:
public static void main(String[] args) throws Exception {
Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> user = userDao.getUser();
System.out.println(user);
}
四丶关于和Dao层结合进行的参数传输
①单个参数的传递
对于单个参数的传递可以使用#{参数名}的形式进行传递
例如:
userMapper.xml文件:
<delete id="deleteUser">
delete from user where id=#{id}
</delete>
Dao层:
/**
* 根据id删除指定的User信息
* @param id
* @return
*/
int deleteUser(int id);
测试类:
public static void main(String[] args) throws Exception {
Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
//删除id为2的User信息(id)
userDao.deleteUser(2);
sqlSession.commit();
}
②使用对象传参
对于使用对象传参可以使用#{属性名},#{属性名},#{属性名}
userMapper.xml文件
<insert id="addUser" >
insert into user (username,pword) values(#{username},#{pword})
</insert>
Dao层:
/**
* 新增User信息
* @param user
* @return
*/
int addUser(User user);
测试类:
public static void main(String[] args) throws Exception {
Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
//新增User信息(id,username,pword)
userDao.addUser(new User(1,"王晓文","li0901"))
sqlSession.commit();
}
五.关于在配置MyBatis过程出现的问题
①关于出现时区出错的问题
解决方案:
url:jdbc:mysql://localhost:3306/ceshi?characterEncoding=utf-8 &serverTimezone=Asia/Shanghai
②关于出现未知的Dao层的问题
解决方案:
需要将userMapper.xml映射文件加载到配置文件mybatisconfig.xml配置文件中
<mappers>
<mapper resource="mapper/userMapper.xml"/>
</mappers>
③对于不能使用主函数main方法测试的问题
解决方案:
可以使用测试单元进行测试,需要先引入junit依赖,然后使用@Test测试单元进行测试,如果测试单元还是不行的话,直接降低maven的版本
junit依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
更多关于MyBatis信息,请转载:(https://mybatis.org/mybatis-3/zh/index.html).