下载:https://github.com/mybatis/mybatis-3/releases
API:https://mybatis.org/mybatis-3/zh/getting-started.html
持久层框架
(Spring的JdbcTemplate、Apache的DBUtils是工具类,是对JDBC的简单封装)
mybatis内部封装了jdbc,使用mybatis只需要关注sql语句本身,不需要关注加载驱动、创建连接等过程。使用ORM思想实现对结果集的封装。
ORM:object relational mapping 对象关系映射
1. 使用
maven项目
1.1 添加jar
<dependency> <groupId>org.mybatisgroupId> <artifactId>mybatisartifactId> <version>3.5.4version> <scope>compilescope> dependency>
1.2 配置
(1)数据源配置
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="mysql"> <environment id="mysql"> <transactionManager type="JDBC">transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/contacts?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="xxx"/> dataSource> environment> environments> <mappers> <mapper resource="com/xt/dao/UserDao.xml">mapper> mappers> configuration>
(2)dao接口的映射文件
UserDao.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="com.xt.dao.UserDao"> <select id="findAll" resultType="com.xt.domain.User"> select * from user select> mapper>
文件名与接口名相同;
映射文件在resource目录下与dao接口同样的目录结构下
namespace为接口位置
id为方法名
resultType为相对应的数据模型类
1.3 简单例子如下
数据模型为User:
public class User implements Serializable { //成员变量 xxx //getter、setter方法 xxx }
接口为UserDao:在接口映射配置文件里写了sql语句,以及标定了返回值类型,于是不用自己写dao的实现类了
public interface UserDao { /*查找所有user*/ ListfindAll(); }
主方法:
//1.读取配置文件 InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory(通过其构建工厂对象) SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //3.使用工厂创建SqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //4.创建dao接口的代理对象 UserDao dao = sqlSession.getMapper(UserDao.class); //5.通过代理对象调用方法 Listlist = dao.findAll(); for(User user:list) { System.out.println(user.toString()); } //6.关闭 sqlSession.close(); is.close();
2. 使用注解的方式
删掉接口映射文件 UserDao.xml
修改SqlMapConfig.xml文件:修改mapper
<mapper class="com.xt.dao.UserDao">mapper>
在接口上添加注解:
UserDao.java
public interface UserDao { /*查找所有user*/ @Select("select * from user") List<User> findAll(); }
3. 其它问题
查询用select标签;插入数据用insert标签;删除用delete标签
在mapper代理对象调用完方法后,需要执行 sqlSession.commit() 提交事务,数据才能进到数据库,否则数据可能会回滚