确定依赖
mysql
mysql-connector-java
8.0.15
org.apache.logging.log4j
log4j
2.11.2
pom
org.mybatis
mybatis
3.5.1
junit
junit
4.11
test
确定目前的目录结构
编写log4j配置文件
编写log4j配置文件
在resource目录下新建log4j.xml文件
log4j/log4j2Logs
%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %l - %m%n
%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M - %m%n
20MB
DEBUG
${basePath}/all.log
${basePath}/%d{yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz
50
${basePath}/info.log
${basePath}/%d{yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz
10
${basePath}/warn.log
${basePath}/%d{yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz
10
${basePath}/error.log
${basePath}/%d{yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz
10
DEBUG
新建mybatis配置文件
在resource目录下新建mybatis-config.xml配置文件
/p>
"http://mybatis.org/dtd/mybatis-3-config.dtd">
构建SqlSessionFactory
根据配置文件构建出sql 会话的产生工厂
package com.ming;
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 org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
/**
* @author ming
* 构建SqlSessionFactory
* 由于数据库连接是宝贵的,需要对数据库连接统一管理,所以使用单例进行管理
* 这里的单利使用的双重锁
* SqlSessionFactory为线程不安全类型需要加锁,确保同一时刻,只有一个线程可以使用该对象
*/
public class SqlSessionFactoryUtil {
/**
* SqlSessionFactory对象
*/
private static SqlSessionFactory sqlSessionFactory = null;
/**
* 类线程锁
*/
private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;
/**
* 日志管理类
*/
private static final Logger logger = LogManager.getLogger();
/**
* 单例
*/
private SqlSessionFactoryUtil(){
}
/**
* @return SqlSessionFactory
* 初始化SqlSessionFactory对象
*/
public static SqlSessionFactory initSqlSessionFactory(){
// 配置文件
String resource = "mybatis-config.xml";
// 输出流
InputStream inputStream = null;
try{
// 获得配置文件输入流
inputStream = Resources.getResourceAsStream(resource);
}catch (IOException e){
// 错误写入配置文件中
logger.error(e);
}
// 即类锁 采用最小同步快的方式
if(sqlSessionFactory == null) {
// 此处排队
synchronized (CLASS_LOCK) {
// 多线程情况下唯一的获取工厂对象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
}
return sqlSessionFactory;
}
/**
* 打开SqlSession
* @return SqlSession
*/
public static SqlSession openSqlSesion(){
// 判空处理
if(sqlSessionFactory == null){
initSqlSessionFactory();
}
return sqlSessionFactory.openSession();
}
}
构建POJO
package com.ming;
public class role {
private int id;
private String role_name;
private String note;
public role(){
}
public void setId(int id) {
this.id = id;
}
public void setRole_name(String role_name) {
this.role_name = role_name;
}
public void setNote(String note) {
this.note = note;
}
public int getId() {
return id;
}
public String getRole_name() {
return role_name;
}
public String getNote() {
return note;
}
}
编写配置文件
package com.ming;
public class role {
private int id;
private String role_name;
private String note;
public role(){
}
public void setId(int id) {
this.id = id;
}
public void setRole_name(String role_name) {
this.role_name = role_name;
}
public void setNote(String note) {
this.note = note;
}
public int getId() {
return id;
}
public String getRole_name() {
return role_name;
}
public String getNote() {
return note;
}
}
更改mybatis配置文件
根据映射定义接口
package com.ming;
import org.apache.ibatis.annotations.Param;
import javax.management.relation.Role;
public interface RoleMapper {
/**
* @param id
* @return
*/
public Role getRole(int id);
/**
* @param id
* @return
*/
public int deleteRole(int id);
/**
* @param role
* @return
*/
public int insertRole(Role role);
}
最后编写应用类
Hello World!
SqlSession sqlSession = null;
try{
sqlSession = SqlSessionFactoryUtil.openSqlSesion();
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
Role role = new Role();
role.setRole_name("name");
role.setNote("note");
roleMapper.insertRole(role);
roleMapper.deleteRole(1);
sqlSession.commit();
}catch (Exception e){
e.printStackTrace();
sqlSession.rollback();
}finally {
if(sqlSession != null){
sqlSession.close();
}
}
%>