Mybatis笔记 – 入门程序开发

一、Mybatis开发环境

           JDK:jdk_1.7

           Eclipse:Oxygen.1 Release (4.7.1)

           MySQL:MySQL Servr 5.7

1、添加相关ja r包

         mybatis的jar包可以从https://github.com/mybatis/mybatis-3/releases下载,下载的解压包中包含了核心包(mybatis-*.jar)、使用手册(mybatis-*.pdf)、相关依赖包(lib)等。

        使用eclipse创建Dynamic Web project 工程,在lib文件夹中加入Mybatis的核心包、依赖包和数据库驱动包等相关包,并将jar包add to bulid path中。

                  image                 image 

                    图1-1-1 复制jar包到lib目录                                图 1-1-2 Add to bulid path

2、相关配置文件

      在工程中新建Source Folder类型的config文件夹,用于存放Mybatis的数据库连接信息、日志、SqlMapConfig等相关配置文件。

(1)log4j.properties

      mybatis默认使用log4j作为输出日志信息。

  1 # Global logging configuration
  2 #在开发环境下日志级别要设置成DEBUG,生成环境设置成info或error
  3 log4j.rootLogger=
DEBUG
, stdout
  4 # Console output...
  5 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  6 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  7 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

(2)建立映射文件

        在config/sqlmap目录下创建sql映射文件emp.xml,可以通过nameplace引用具体的SQL标签。

  1 <?xml version="1.0" encoding="UTF-8" ?>
  2 <!DOCTYPE mapper
  3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5 <mapper namespace="test">
  6 </mapper>

(3)SqlMapConfig.xml

     SqlMapConfig.xml是mybatis用于配置数据源、事务管理的核心配置文件。

  1 <?xml version="1.0" encoding="UTF-8" ?>
  2 <!DOCTYPE configuration
  3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5 <configuration>
  6 	<!-- 和spring整合后 environments配置将废除-->
  7 	<environments default="development">
  8 		<environment id="development">
  9 		<!-- 使用jdbc事务管理-->
 10 			<transactionManager type="JDBC" />
 11 		<!-- 数据库连接池-->
 12 			<dataSource type="POOLED">
 13 				<property name="driver" value="com.mysql.jdbc.Driver" />
 14 				<property name="url" value="jdbc:mysql://localhost:3306/
 15                                                    scott?characterEncoding=utf-8" />
 16 				<property name="username" value="root" />
 17 				<property name="password" value="su486213" />
 18 			</dataSource>
 19 		</environment>
 20 	</environments>
 21 	<!-- 加载映射文件 -->
 22 	<mappers>
 23 		<mapper resource="SqlMap/emp.xml"/>
 24 	</mappers>
 25 </configuration>

3、po类

     po类用于mybatis进行sql映射,属性与数据库表中的字段需要相对应。

              image

  1 package po;
  2 import java.util.Date;
  3 public class Emp {
  4 	private int empno;
  5 	private String ename;
  6 	private String job;
  7 	private int mgr;
  8 	private Date hiredate;
  9 	private double sal;
 10 	private double comm;
 11 	private int deptno;
 12     set/get() ...;
 13 }

4、会话工厂

  1  package Test;
  2  //请导入所需的java类
  3   public class Mybatis_first {
  4   	//使用 单例模式 创建会话工厂
  5   	private SqlSessionFactory sqlSessionFactory;
  6   	@Before
  7   	public void createSqlSessionFactory() throws IOException {
  8   		// Mybatis配置文件
  9   		String resource = "SqlMapConfig.xml";
 10 		// 得到配置文件流
 11   		InputStream inputStream = Resources.getResourceAsStream(resource);
 12   		// 创建会化工厂,传入Mybatis配置文件信息
 13   		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 14   	}
 15   	//测试类	
 16   	@Test
 17  }

二、Junit单元测试

1、根据id获取员工信息

(1)映射文件

  1 <select id="findEmpById" parameterType="int" resultType="po.Emp">
  2 	select * from emp where empno = #{empno}
  3 </select>

(2)测试程序

  1 	@Test
  2 	public void testFindEmpById() {
  3 		// 数据库会话实例
  4 		SqlSession sqlSession = null;
  5 		try {
  6 			// 创建数据库会话实例sqlSession
  7 			sqlSession = sqlSessionFactory.openSession();
  8 			// 根据部门id查询单个记录,如果使用selectOne查询多条记录则抛出异常:
  9 			Emp dept = sqlSession.selectOne("test.findEmpById", 7369);
 10 			// 输出用户信息
 11 			System.out.println(dept);
 12 		} catch (Exception e) {
 13 			e.printStackTrace();
 14 		} finally {
 15 			if (sqlSession != null) {
 16 				sqlSession.close();
 17 			}
 18 		}
 19 	}

(3)运行结果

    image

2、根据员工姓名模糊查询员工信息

(1)映射文件

  1 <select id="findEmpByEmpname" parameterType="java.lang.String" resultType="po.Emp">
  2 	select * from emp  where ename like '%${value}%'
  3 </select>

(2)测试程序

  1 	@Test
  2 	public void testFindEmpByEmpname() {
  3 		// 数据库会话实例
  4 		SqlSession sqlSession = null;
  5 		try {
  6 			// 创建数据库会话实例sqlSession
  7 			sqlSession = sqlSessionFactory.openSession();
  8 			// 查询一条或多条记录,根据用户id查询用户信息
  9 			List<Emp> list = sqlSession.selectList("test.findEmpByEmpname", "TH");
 10 			System.out.println(list.size());
 11 		} catch (Exception e) {
 12 			e.printStackTrace();
 13 		} finally {
 14 			if (sqlSession != null) {
 15 				sqlSession.close();
 16 			}
 17 		}
 18 
 19 	}

(3)运行结果

image

3、添加员工信息

(1)映射文件

  1 <insert id="insertEmp" parameterType="po.Emp">
  2 	<selectKey keyProperty="empno" order="AFTER" resultType="java.lang.Integer">
  3 		select LAST_INSERT_ID()//返回自增主键
  4 	</selectKey>
  5 	 insert into emp(ename,job) values(#{ename},#{job})
  6 </insert>

(2)测试程序

  1 	@Test
  2 	public void testInsert() {
  3 		// 数据库会话实例
  4 		SqlSession sqlSession = null;
  5 		try {
  6 			// 创建数据库会话实例sqlSession
  7 			sqlSession = sqlSessionFactory.openSession();
  8 			// 添加员工信息(empno是自增主键)
  9 			Emp emp = new Emp();
 10 			emp.setEname("admin");
 11 			emp.setJob("test");
 12 			sqlSession.insert("test.insertEmp", emp);
 13 			//提交事务
 14 			sqlSession.commit();
 15 			//返回自增主键
 16 			System.out.println(emp.getEmpno());
 17 		} catch (Exception e) {
 18 			e.printStackTrace();
 19 		} finally {
 20 			if (sqlSession != null) {
 21 				sqlSession.close();
 22 			}
 23 		}
 24 	}

(3)运行结果

           image

4、更新员工信息

(1)映射文件

  1 <delete id="deleteEmpById" parameterType="int">
  2 	delete from emp where empno=#{empno}
  3 </delete>

(2)测试程序

  1 	@Test
  2 	public void testUpdate() {
  3 	// 数据库会话实例
  4 	SqlSession sqlSession = null;
  5 	try {
  6 		// 创建数据库会话实例sqlSession
  7 		sqlSession = sqlSessionFactory.openSession();
  8 		// 添加员工信息
  9 		Emp emp = new Emp();
 10 		emp.setEmpno(7938);
 11 		emp.setEname("admin1");
 12 		emp.setJob("tes2t");
 13 		sqlSession.update("test.updateEmp", emp);
 14 		// 提交事务
 15 		sqlSession.commit();
 16 		} catch (Exception e) {
 17 			e.printStackTrace();
 18 		} finally {
 19 			if (sqlSession != null) {
 20 				sqlSession.close();
 21 			}
 22 		}
 23 	}

(3)运行结果

          image

5、删除员工信息

(1)映射文件

  1 <update id="updateEmp" parameterType="po.Emp">
  2 	update emp set ename=#{ename},job=#{job}  where empno=#{empno}
  3 </update>

(2)测试程序

  1 	@Test
  2 	public void testDelete() {
  3 		// 数据库会话实例
  4 		SqlSession sqlSession = null;
  5 		try {
  6 			// 创建数据库会话实例sqlSession
  7 			sqlSession = sqlSessionFactory.openSession();
  8 			// 删除员工
  9 			sqlSession.delete("test.deleteEmpById",7941);
 10 			// 提交事务
 11 			sqlSession.commit();
 12 		} catch (Exception e) {
 13 			e.printStackTrace();
 14 		} finally {
 15 			if (sqlSession != null) {
 16 				sqlSession.close();
 17 			}
 18 		}
 19 	}

(3)运行结果

           image

posted @ 2018-01-25 16:30  苏贺  阅读(271)  评论(0编辑  收藏  举报