搭建框架流程
导入pom中依赖的jar包,导入mybatis.xml,导入log4j配置文件,导入SQLSession工具
<dependencies>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
</dependencies>
<?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>
<!--给类起别名-->
<typeAliases>
<!-- <typeAlias type="com.atshiyou.bean.Student" alias="stu"></typeAlias>-->
<package name="com.atshiyou.bean"/>
</typeAliases>
<!--在配置环境之前,配置pagehelper的插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
<environments default="development2">
<environment id="development2">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/express?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--配置扫描添加注解的接口类-->
<mappers>
<mapper class="com.atshiyou.dao.StudentDao"></mapper>
</mappers>
</configuration>
log4j.rootLogger=DEBUG, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
package com.atshiyou.Util;
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.Reader;
public class SqlSessionUtil {
// ThreadLocal管理SQLSession
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
private static SqlSessionFactory sqlSessionFactory;
// 配置文件只加载一遍
static{
try {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"development2");
} catch (IOException e) {
e.printStackTrace();
}
}
//打开session方法
public static SqlSession getSession(){
//类似于单例的模式,获取sqlsession对象
SqlSession session = threadLocal.get();
if(session==null){
session = sqlSessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
//关闭session
public static void closeSession(){
SqlSession session = threadLocal.get();
if(session!=null) {
session.close();
threadLocal.remove();//清除数据
}
}
}
在dao层编写SQL语句
package com.atshiyou.dao;
import com.atshiyou.bean.Student;
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Map;
public interface StudentDao {
//增删改查
@Insert("insert into student(stuname,stuage,gid) values (#{stuName},#{stuAge},#{gid})")
@Options(useGeneratedKeys = true,keyProperty = "stuId") //获取新增数据的id
public int insertStu(Student student);
//删除
@Delete("delete from student where stuid = #{sid}")
public int delete(int sid);
//修改
@Update("update student set stuname=#{stuName},stuage=#{stuAge},gid=#{gid} where stuid=#{stuId}")
public int updateStu(Student student);
//查询
@Select("select * from student")
public List<Student> findAll();
@Select("select count(*) from student")
public int totalCount();
//计算出ID的最大值,最小值,平均值
@Select("select Max(stuid) max,Min(stuid) min,Avg(stuid) avg from student")
public Map total2();
}
发现SQL语句写在 代码中显得代码乱,所以我们将SQL语句写在配置文件中
使用的注解替换成 ....Provider(type=?,method=?)
如果说是使用连表联查的SQL语句,还是需要借助配置文件
resultMap中定义的是映射的文件
需要在mybatis配置文件中,将二次扫描的mapper删去,不删除会出现错误,因为扫描mapper包的时候,已经将接口扫描进去了
Mapped Statements collection already contains value for com.atshiyou.dao.StudentDao2.getAllStu
配置二级缓存
在接口上:
在方法上: