简介
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
当前,最新版本是MyBatis 3.5.2 ,其发布时间是2019年7月15日。
入门
1、安装
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
如果是在Maven构建的项目中则需要添加依赖,将下面的代码写进pom.xml中,也可以去https://mvnrepository.com/寻找需要的依赖进行使用。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
2、从 XML 中构建 SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的,而SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
Mybatis包含一个Resources工具,可以加载资源文件
String resource = "配置文件全限定名"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
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"> <!--事务管理器 使用mysql的事务管理器来管理事务 --> <transactionManager type="JDBC"/> <!--数据源--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--关联Mapper映射文件--> <mappers> <mapper resource="映射文件的全限定名,这里的映射文件就是后面SqlSession要用到的xml文件"/> </mappers> </configuration>
升级版的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 resource="db.properties"/> <!--配置别名 --> <typeAliases> <!--配置单个对象的别名--> <!--<typeAlias type="com.test.User" alias="User"></typeAlias>--> <!--配置一个包所有类的别名,默认别名是类名,大小写不敏感 可以在bean包的类名上加上@Alias("别名")进行命名 --> <!--<package name="com.test"/>--> </typeAliases> <!-- 配置环境 default:development启动时使用哪个环境 --> <environments default="development"> <environment id="development"> <!-- 使用mysql的事物管理器来管理事务--> <transactionManager type="JDBC"/> <!--数据源--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--关联mapper文件--> <mappers> <mapper resource="com/test/UserMapper.xml"></mapper> </mappers> </configuration>
db.properties文件内容
driver= com.mysql.jdbc.Driver
url = jdbc:mysql:///mybatis?
username = root
password = ccc
3、从SqlSessionFactory获取SqlSession
SqlSession session = sqlSessionFactory.openSession();
这里提供一个工具类,用来获取SqlSession
import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MybatisUtil { private static SqlSessionFactory sf; static{ InputStream in = null; try { //注意将mybatis.xml文件放入resources文件中,可以随意起名字 in = Resources.getResourceAsStream("mybatis.xml"); } catch (IOException e) { e.printStackTrace(); } sf=new SqlSessionFactoryBuilder().build(in); } public static SqlSession getSession(){ return sf.openSession(); } }
4、SqlSession用来执行语句
//增加 int result = session.insert("com.test.dao.IUserDao.save", user); //删除 int result = session.delete("com.test.dao.IUserDao.delete", id); //修改 int result = session.update("com.test.dao.IUserDao.update", user); //查询单一对象 User user = (User)session.selectOne("com.test.dao.IUserDao.find", id); //查询所有对象 List<User> list = session.selectList("com.test.dao.IUserDao.findAll");
其对应的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"> <!--namespace一般是接口的全限定名--> <mapper namespace="com.test.dao.IUserDao"> <!-- #{}表示调用对象中响应的get方法--> <!-- 保存 useGeneratedKeys是否返回对应主键值 keyProperty将主键的值返回给类的哪个属性 --> <insert id="save" useGeneratedKeys="true" keyProperty="id"> insert into user values(null,#{username},#{password},#{date},#{salary}) </insert> <!-- 删除 --> <delete id="delete"> delete from user where id=#{id} </delete> <!-- 更新 --> <update id="update"> update user set username=#{username},password=#{password},date=#{date},salary=#{salary} where id=#{id} </update> <!--type:把结果集封装成对象的类型--> <resultMap id="myResultMap" type="User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> <result column="date" property="date"/> <result column="salary" property="salary"/> </resultMap> <!-- 查训一个 --> <select id="find" resultMap="myResultMap"> select * from user where id=#{id} </select> <!-- 查询全部 --> <select id="findAll" resultType="User"> select * from user </select> </mapper>
5、导入日志
添加属性配置文件,名字必须为log4j.properties
# ERROR>WARN>INFO>DEBUG>TRACE # Global logging configuration log4j.rootLogger=ERROR, stdout # MyBatis logging configuration... <!--修改下面的路径即可进行日志记录--> log4j.logger.com.test.dao=TRACE # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
导入依赖
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency>