• 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

  • 相关阅读:
    node.js之npm命令安装扩展模块
    jquery选择器(转)
    node.js入门
    node.js之模块
    redhat 下装redis
    html 5之websocket(转)
    node.js安装和环境搭建
    javascript 动态加载脚本库
    HTML5 LocalStorage 本地存储
    【ecmascript】 ECMAScript 6概览【转】
  • 原文地址:https://www.cnblogs.com/sh086/p/8351896.html
Copyright © 2020-2023  润新知