MyBatis使用

来源:互联网 发布:防闪退软件下载 编辑:程序博客网 时间:2024/04/30 09:31
每一个 MyBatis 的应 用程序 都以一 个 SqlSessionFactory 对象的 实例为 核心。SqlSessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获 得 。

SqlSessionFactoryBuilder 对象可以从 XML 配置文件,或从 Configuration 类的习惯准备的实例中构建 SqlSessionFactory 对象。

下面先使用Java代码构建SqlSessionFactory对象,这里我使用的是C3p0数据库连接池,如下:

MyBatisUtil工具类:

package com.tenghu.mybatis.util;import java.beans.PropertyVetoException;import org.apache.ibatis.mapping.Environment;import org.apache.ibatis.session.Configuration;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.apache.ibatis.transaction.TransactionFactory;import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;import com.mchange.v2.c3p0.ComboPooledDataSource;/** * 工具类 * @author Arvin * */public class MyBatisUtil {private MyBatisUtil(){}private static Configuration configuration;static{try {ComboPooledDataSource dataSource=new ComboPooledDataSource();//创建数据源dataSource.setDriverClass("com.mysql.jdbc.Driver");//设置数据库驱动dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/company");//设置数据库连接dataSource.setUser("root");//设置用户名dataSource.setPassword("xiaohu");//设置密码//创建事务管理工厂TransactionFactory transactionFactory=new JdbcTransactionFactory();//创建EnvironmentEnvironment environment=new Environment("development", transactionFactory, dataSource);//实例化Configuration对象configuration=new Configuration(environment);} catch (PropertyVetoException e) {e.printStackTrace();}}/** * 开启会话 * @param type * @return */public static SqlSession openSqlSession(Class<?> type){//添加映射类configuration.addMapper(type);//创建Sql会话工厂SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(configuration);//打开Sql会话return sqlSessionFactory.openSession();}/** * 关闭SqlSession * @param sqlSession */public static void closeSqlSession(SqlSession sqlSession){if(null!=sqlSession)sqlSession.close();}}

工具类就是负责打开SqlSession和关闭SqlSession

Emp.java实体类:

package com.tenghu.mybatis.model;public class Emp {private String name;private int id;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Emp(String name, int id, int age) {this.name = name;this.id = id;this.age = age;}public Emp() {}}

EmpMapper.java类:

package com.tenghu.mybatis.mapper;import java.util.List;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import com.tenghu.mybatis.model.Emp;public interface EmpMapper {/** * 查询所有数据 * @return */@Select(value="select * from emp")List<Emp> queryForListEmp();/** * 根据ID查询数据 * @param id * @return */@Select(value="select * from emp where id=#{id}")Emp queryForEmp(int id);/** * 添加数据 * @param emp * @return */@Insert(value="insert into emp values(#{name},#{id},#{age})")int addEmp(Emp emp);/** * 修改数据 * @param emp * @return */@Update(value="update emp set name=#{name},age=#{age} where id=#{id}")int updateEmp(Emp emp);/** * 删除数据 * @param id * @return */@Delete(value="delete from emp where id=#{id}")int deleteEmp(int id);}

测试类:

package com.tenghu.mybatis.test;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import com.tenghu.mybatis.mapper.EmpMapper;import com.tenghu.mybatis.model.Emp;import com.tenghu.mybatis.util.MyBatisUtil;public class EmpMapperTest {/** * 测试查询所有数据 */@Testpublic void testQueryForList(){SqlSession sqlSession=null;try {sqlSession=MyBatisUtil.openSqlSession(EmpMapper.class);EmpMapper empMapper=sqlSession.getMapper(EmpMapper.class);List<Emp> empList=empMapper.queryForListEmp();for (Emp emp : empList) {System.out.println(emp.getAge()+"\t"+emp.getId()+"\t"+emp.getName());}} catch (Exception e) {e.printStackTrace();}finally{//关闭SqlSessionMyBatisUtil.closeSqlSession(sqlSession);}}/** * 根据ID查询数据 */@Testpublic void testQueryEmp(){SqlSession sqlSession=null;try {//实例化SqlSessionsqlSession=MyBatisUtil.openSqlSession(EmpMapper.class);EmpMapper empMapper=sqlSession.getMapper(EmpMapper.class);Emp emp=empMapper.queryForEmp(3);System.out.println(emp.getAge()+"\t"+emp.getId()+"\t"+emp.getName());} catch (Exception e) {e.printStackTrace();}finally{//关闭SqlSessionMyBatisUtil.closeSqlSession(sqlSession);}}/** * 添加数据 */@Testpublic void testAddEmp(){SqlSession sqlSession=null;try {//实例化SqlSessionsqlSession=MyBatisUtil.openSqlSession(EmpMapper.class);EmpMapper empMapper=sqlSession.getMapper(EmpMapper.class);Emp emp=new Emp("多多", 6, 23);int result=empMapper.addEmp(emp);//提交sqlSession.commit();System.out.println(result>0?"添加成功":"添加失败");} catch (Exception e) {e.printStackTrace();//回滚sqlSession.rollback();}finally{//关闭SqlSessionMyBatisUtil.closeSqlSession(sqlSession);}}/** * 更新数据 */@Testpublic void testUpdateEmp(){SqlSession sqlSession=null;try {//实例化SqlSessionsqlSession=MyBatisUtil.openSqlSession(EmpMapper.class);EmpMapper empMapper=sqlSession.getMapper(EmpMapper.class);Emp emp=new Emp("黄飞鸿", 6, 67);int result=empMapper.updateEmp(emp);//提交sqlSession.commit();System.out.println(result>0?"修改成功":"修改失败");} catch (Exception e) {e.printStackTrace();//回滚sqlSession.rollback();}finally{//关闭SqlSessionMyBatisUtil.closeSqlSession(sqlSession);}}/** * 删除数据 */@Testpublic void testDeleteEmp(){SqlSession sqlSession=null;try {//实例化SqlSessionsqlSession=MyBatisUtil.openSqlSession(EmpMapper.class);EmpMapper empMapper=sqlSession.getMapper(EmpMapper.class);int result=empMapper.deleteEmp(6);//提交sqlSession.commit();System.out.println(result>0?"删除成功":"删除失败");} catch (Exception e) {e.printStackTrace();//回滚sqlSession.rollback();}finally{//关闭SqlSessionMyBatisUtil.closeSqlSession(sqlSession);}}}

以上代码是使用纯Java代码操作MyBatis,接下来是Xml配置的方式:

mybatis-config.xml主配置文件:

<?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="Emp" type="com.tenghu.mybatis.model.Emp"/></typeAliases><environments default="development"><environment id="development"><!-- 配置事务管理器 --><transactionManager type="JDBC"/><!-- 配置数据源 --><dataSource type="POOLED"><property name="driver" value="${mysql.driver}"/><property name="url" value="${mysql.url}"/><property name="username" value="${mysql.username}"/><property name="password" value="${mysql.password}"/></dataSource></environment></environments><!-- 配置映射文件 --><mappers><mapper resource="com/tenghu/mybatis/mapper/EmpMapper.xml"/></mappers></configuration>

EmpMapper.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.tenghu.mybatis.mapper.EmpMapper"><!-- 查询所有数据 --><select id="queryAllEmp" resultType="Emp">select * from emp</select><!-- 更具ID查询数据 --><select id="queryForById" parameterType="int" resultType="Emp">select * from emp where id=#{id}</select><!-- 添加数据 --><insert id="insertEmp" parameterType="Emp">insert into emp values(#{name},#{id},#{age})</insert><!-- 修改数据 --><update id="updateByIdEmp" parameterType="Emp">update emp set name=#{name},age=#{age} where id=#{id}</update><!-- 删除数据 --><delete id="deleteByIdEmp" parameterType="int">delete from emp where id=#{id}</delete></mapper>


实体类和上面一样:

XML方式测试类:

package com.tenghu.mybatis.test;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import com.tenghu.mybatis.model.Emp;import com.tenghu.mybatis.util.SqlSessionUtil;public class EmpMapperTest {//命名空间,在EmpMapper.xml文件中的mappers节点的namespace属性private String namespace="com.tenghu.mybatis.mapper.EmpMapper.";/** * 测试查询所有数据 */@Testpublic void testQueryForList(){SqlSession sqlSession=null;try {sqlSession=SqlSessionUtil.openSqlSession();List<Emp> empList=sqlSession.selectList(namespace+"queryAllEmp");for (Emp emp : empList) {System.out.println(emp.getAge()+"\t"+emp.getId()+"\t"+emp.getName());}} catch (Exception e) {e.printStackTrace();}finally{//关闭SqlSessionSqlSessionUtil.closeSqlSession(sqlSession);}}/** * 根据ID查询数据 */@Testpublic void testQueryEmp(){SqlSession sqlSession=null;try {//实例化SqlSessionsqlSession=SqlSessionUtil.openSqlSession();Emp emp=sqlSession.selectOne(namespace+"queryForById", 5);System.out.println(emp.getAge()+"\t"+emp.getId()+"\t"+emp.getName());} catch (Exception e) {e.printStackTrace();}finally{//关闭SqlSessionSqlSessionUtil.closeSqlSession(sqlSession);}}/** * 添加数据 */@Testpublic void testAddEmp(){SqlSession sqlSession=null;try {//实例化SqlSessionsqlSession=SqlSessionUtil.openSqlSession();Emp emp=new Emp("多多", 6, 23);int result=sqlSession.insert(namespace+"insertEmp", emp);//提交sqlSession.commit();System.out.println(result>0?"添加成功":"添加失败");} catch (Exception e) {e.printStackTrace();//回滚sqlSession.rollback();}finally{//关闭SqlSessionSqlSessionUtil.closeSqlSession(sqlSession);}}/** * 更新数据 */@Testpublic void testUpdateEmp(){SqlSession sqlSession=null;try {//实例化SqlSessionsqlSession=SqlSessionUtil.openSqlSession();Emp emp=new Emp("黄飞鸿", 6, 67);int result=sqlSession.update(namespace+"updateByIdEmp", emp);//提交sqlSession.commit();System.out.println(result>0?"修改成功":"修改失败");} catch (Exception e) {e.printStackTrace();//回滚sqlSession.rollback();}finally{//关闭SqlSessionSqlSessionUtil.closeSqlSession(sqlSession);}}/** * 删除数据 */@Testpublic void testDeleteEmp(){SqlSession sqlSession=null;try {//实例化SqlSessionsqlSession=SqlSessionUtil.openSqlSession();int result=sqlSession.delete(namespace+"deleteByIdEmp",6);//提交sqlSession.commit();System.out.println(result>0?"删除成功":"删除失败");} catch (Exception e) {e.printStackTrace();//回滚sqlSession.rollback();}finally{//关闭SqlSessionSqlSessionUtil.closeSqlSession(sqlSession);}}}

这样就实现了Java代码与XML配置文件对MyBatis的操作,虽然文字说得少,但是代码还是完整的,到这里MyBatis简单的增删改查的操作就算是实现了。



0 0