确定依赖
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配置文件
构建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);}
最后编写应用类
<%@ page import="org.apache.ibatis.session.SqlSession" %><%@ page import="com.ming.SqlSessionFactoryUtil" %><%@ page import="com.ming.RoleMapper" %><%@ page import="com.ming.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(); } }%>