1,创建一个maven项目
2,在pom文件中引入依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.5</version> </dependency> </dependencies>3,打开本地数据库,新建一张表,插入数据
4,新建与表对应的实体类
package model; import java.util.Date; /** * user * */ public class User { private int id; private String loginName; private String userName; private String password; private int createUser; private Date createDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getCreateUser() { return createUser; } public void setCreateUser(int createUser) { this.createUser = createUser; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } }5,在resource下,新建一database.properties
# ======================================================== # mysql database setting # ======================================================== driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/users username=root password=1234566, 在resource下,建一个mybatis-config.xml,引入database.properties中的数据库配置
<?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="database.properties"></properties> <environments default="dev"> <environment id="dev"> <transactionManager type="jdbc"></transactionManager> <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> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>7,建一个UserMapper.xml,并在上面的config的mapper中引入,namespace是下面 UserMapper.java的全路径,resultMap的id可以随意取,type是实体类的全路径,里面表的列名和实体类一 一对应
<?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="mapper.UserMapper"> <resultMap id="BaseResultMap" type="model.User"> <id column="id" property="id" jdbcType="BIGINT" /> <result column="user_name" property="userName" jdbcType="BIGINT" /> <result column="login_name" property="loginName" jdbcType="VARCHAR" /> <result column="password" property="password" jdbcType="INTEGER" /> <result column="create_date" property="createDate" jdbcType="VARCHAR" /> <result column="create_user" property="createUser" jdbcType="VARCHAR" /> </resultMap> <!-- 根据pk查询 --> <select id="selectById" resultMap="BaseResultMap"> select * from saut_m_user where id = 1 </select> </mapper>8,写一个接口UserMapper.java,里面写上查询方法,方法名和 UserMapper.xml中的select的id一致
package mapper; import model.User; public interface UserMapper { User selectById(); }9,创建一个SqlSessionFactory.java,用来获取SQLSession
package dao; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class SqlSessionFactory { public static SqlSession getSqlSession(){ String resource = "mybatis-config.xml"; InputStream in; SqlSession ss = null; try { in = Resources.getResourceAsStream(resource); org.apache.ibatis.session.SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in); ss = build.openSession(); } catch (IOException e) { e.printStackTrace(); } return ss; } }10,建一个UserService.java,获取sqlSession,并调用查询方法,返回结果
package service; import org.apache.ibatis.session.SqlSession; import dao.SqlSessionFactory; import mapper.UserMapper; import model.User; public class UserService { public User selectById(){ SqlSession sqlSession = SqlSessionFactory.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.selectById(); return user; } }11,写一个JunitTest
package mybatis.demo; import java.io.IOException; import org.junit.Test; import dao.UserDao; import model.User; import service.UserService; /** * Unit test for simple App. */ public class AppTest{ UserDao userDao = new UserDao(); UserService service = new UserService(); @Test public void test1() throws IOException{ User user = userDao.selectById(); System.err.println(user.getLoginName()); } @Test public void test2() throws IOException{ User user = service.selectById(); System.err.println(user.getLoginName()); } }12,调用方法,打印结果
package dao; import java.io.IOException; import org.apache.ibatis.session.SqlSession; import dao.SqlSessionFactory; import model.User; public class UserDao { public User selectById() throws IOException{ SqlSession sqlSession = SqlSessionFactory.getSqlSession(); User user = sqlSession.selectOne("mapper.UserMapper.selectById"); return user; } }扩展 :一 、mybatis 的缓存
mybatis 有一级缓存 和 二级缓存
一级缓存 是session级的,就是同一个session调用同一个查询语句并且参数相同,就会触发一级缓存,默认开启状态,并且无法关闭;
二级缓存 是名称空间(namespace)级的,就是在一个名称空间下,不同的session调用同一个查询语句并且参数相同,就会触发,默认开启,可以关闭
<setting name="cacheEnabled" value="false" />二 、mybatis的分页查询
导入依赖
<!-- mybatis分页组件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>${pagehelper.version}</version> </dependency>在配置文件中配置
<plugins> <!-- 分页查询插件 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="mysql" /> <property name="reasonable" value="true" /> <property name="pageSizeZero" value="true"/> </plugin> </plugins>在查询中的应用
/** * ==================================================================== *功 能: 分页查询 ---------------------------------------------------------------------- *修改记录 : *日 期 版本 修改人 修改内容 *2018年04月19日 v0.0.1 codeGenerator 创建 ==================================================================== */ @Override public Pager selectByPage(Context<OrgVo> context) { Pager pager = null; try { PageHelper.startPage(context.getPageNum(), context.getPageSize(), true); if (!StringUtils.isEmpty(context.getOrderBy())) { // 处理排序规则 PageHelper.orderBy(context.getOrderBy()); } List<OrgVo> list = orgExtendMapper.selectByVo(context.getObject()); PageInfo<OrgVo> pageInfo = new PageInfo<OrgVo>(list); pager = new Pager( pageInfo.getPageSize(), pageInfo.getPageNum(), pageInfo.getPages(), pageInfo.getTotal(), pageInfo.getList()); } catch (Exception e) { // 记录底层异常信息情况 logger.error("查询失败:{}", e); // 转化异常信息并将异常信息抛至上层 Exceptions.throwBusinessException("查询失败!"); } return pager; }项目总览