Mybatis基本配置及其测试CRUD

来源:互联网 发布:考研形势数据图表分析 编辑:程序博客网 时间:2024/06/03 07:57

重点:配置好一个示例后,其他的项目就可以直接copy,把精力和时间从复杂的配置中解放出来,专注于业务的理解。

百度百科:

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
【配置】

引入jar包+sql驱动包


加入jdbc.properties文件

加入mybatis-config.xml文件

加入工具类SqlSessionFactoryUtil

以上文件可从网上搜索或从官网copy(一切只为简化,将重心放在业务上)


jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/db_mybatisjdbc.username=rootjdbc.password=123456

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><properties resource="jdbc.properties"/><typeAliases><typeAlias alias="Employee" type="com.zhiqi.model.Employee"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><mappers><mapper resource="com/zhiqi/mappers/EmployeeMapper.xml" /></mappers></configuration>

package com.zhiqi.util;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class SqlSessionFactoryUtil {private static SqlSessionFactory sqlSessionFactory;public static SqlSessionFactory getSqlSessionFactory(){if(sqlSessionFactory==null){InputStream inputStream=null;try{inputStream=Resources.getResourceAsStream("mybatis-config.xml");sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);}catch(Exception e){e.printStackTrace();}}return sqlSessionFactory;}public static SqlSession openSession(){return getSqlSessionFactory().openSession();}}

以上util工具类原创来自java1234小峰

构造POJO类

package com.zhiqi.model;public class Employee {private Integer empno;private String ename;private String job;public Employee() {super();// TODO Auto-generated constructor stub}public Employee(String ename, String job) {super();this.ename = ename;this.job = job;}public Integer getEmpno() {return empno;}public void setEmpno(Integer empno) {this.empno = empno;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}}

数据库手动创建:


mapper接口

package com.zhiqi.mappers;import com.zhiqi.model.Employee;public interface EmployeeMapper {public int add(Employee e);}

对应的xml配置

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.zhiqi.mappers.EmployeeMapper"><insert id="add" parameterType="Employee"  >insert into t_employee values(null,#{ename},#{job})</insert></mapper> 

Hibernate也是实体类对应配置文件,以上不难理解。


运行后如上图。


【配置详解】

environments

MyBatis 支持多个环境,可以任意配置;如增加一个测试环境:

<environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment><environment id="test"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments>


transactionManager

MyBatis 支持两种类型的事务管理器:JDBC 和MANAGED(托管);
JDBC:应用程序负责管理数据库连接的生命周期;
MANAGED : 由应用服务器负责管理数据库连接的生命周期; ( 一般商业服务器才有此功能, 如
JBOSS,WebLogic)----Tomcat没有,开发只用JDBC


dataSource

用来配置数据源;类型有:UNPOOLED,POOLED,JNDI;
UNPOOLED,没有连接池,每次数据库操作,MyBatis 都会创建一个新的连接,用完后,关闭;适合小并发项目;(大并发项目就挂了)
POOLED,用上了连接池;
JNDI,使用应用服务器配置JNDI 数据源获取数据库连接


properties配置属性

<properties resource="jdbc.properties"/>

<!-- properties resource="jdbc.properties"/ 等价于以下:--><properties><property name="jdbc.driverClassName" value="com.mysql.jdbc.Driver"/><property name="jdbc.url" value="jdbc:mysql://localhost:3306/db_mybatis"/><property name="jdbc.username" value="root"/><property name="jdbc.password" value="123456"/></properties>

typeAliases

给类的完成限定名取别名,方便使用;

<!--typeAliases><typeAlias alias="Employee" type="com.zhiqi.model.Employee"/></typeAliases--><typeAliases><package name="com.zhiqi.model"/></typeAliases>


mappers

引入映射文件

<mappers><!-- mapper resource="com/zhiqi/mappers/EmployeeMapper.xml" /><mapper class="com.zhiqi.mappers.EmployeeMapper" /--><package name="com.zhiqi.mappers"/></mappers>


配置Log4j 日志


log4j.rootLogger=info,appender1,appender2log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender2=org.apache.log4j.FileAppender log4j.appender.appender2.File=F:/logFile.txt log4j.appender.appender1.layout=org.apache.log4j.TTCCLayoutlog4j.appender.appender2.layout=org.apache.log4j.TTCCLayout  




员工的增删改查

package com.zhiqi.mappers;import java.util.List;import com.zhiqi.model.Employee;public interface EmployeeMapper {public int add(Employee e);public int update(Employee e);public int delete(Employee e);//public int delete(Integer i);public Employee findById(Integer i);public List<Employee> employeeList();}

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.zhiqi.mappers.EmployeeMapper"><resultMap type="Employee" id="EmployeeResult"><id property="empno" column="empno"/><result property="ename" column="ename"/><result property="job" column="job"/></resultMap><insert id="add" parameterType="Employee"  >insert into t_employee values(null,#{ename},#{job})</insert><update id="update" parameterType="Employee"  >update t_employee set ename=#{ename},job=#{job} where empno=#{empno}</update><delete id="delete" parameterType="Employee"  >delete from t_employee where empno=#{empno}</delete><select id="findById" parameterType="Integer" resultType="Employee" >select * from t_employee where empno=#{empno}</select><select id="employeeList" resultMap="EmployeeResult" >select * from t_employee</select></mapper> 

package com.zhiqi.service;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.apache.log4j.Logger;import com.zhiqi.mappers.EmployeeMapper;import com.zhiqi.model.Employee;import com.zhiqi.util.SqlSessionFactoryUtil;public class EmployeeServiceTest {private static Logger logger=Logger.getLogger(EmployeeServiceTest.class);public static void main(String[] args) {SqlSession sqlSession=SqlSessionFactoryUtil.openSession();EmployeeMapper employeeMapper=sqlSession.getMapper(EmployeeMapper.class);//logger.info("添加员工");//Employee e=new Employee();e.setEname("miller");e.setJob("办事员");//employeeMapper.add(e);//logger.info("修改员工");//Employee e=new Employee();//e.setEmpno(6);e.setEname("miller2");e.setJob("销售经理");//employeeMapper.update(e);//logger.info("删除员工");//Employee e=new Employee();//e.setEmpno(6);//employeeMapper.delete(e);//logger.info("查询某个员工-根据empno");//Employee emp=employeeMapper.findById(5);//logger.info(emp.getEmpno()+" "+emp.getEname()+" "+emp.getJob());logger.info("查询员工List");List<Employee> empList=employeeMapper.employeeList();for(Employee emp:empList){logger.info(emp.getEmpno()+" "+emp.getEname()+" "+emp.getJob());}sqlSession.commit();//提交事务sqlSession.close();//关闭session}}


0 0
原创粉丝点击