zoukankan      html  css  js  c++  java
  • Mybatis(综合案例)

    MyBatis本是apache的一个开源项目iBatis,2010年这个项目有Apache software foundation 迁移到了Google code,并改名MyBatis.201311月迁移到GithubiBatis是半ORM映射框架,它需要在数据库里手动建表,CURD操作时要自己写SQL语句,而Hibernate是全ORM映射框架,它只需要配置好文件,表会自动生成,CURDSQL语句也是自动生成的,这是他们的主要区别。

    MyBatis小巧,简单易学

    MyBatis入门案例(综合)

    1.1附加架包

    1.2编写MyBatis配置文件 mybatis-comfig.xml(由于本人oracle数据库安装的问题端口号及数据库有所不同)

    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <!--  别名的配置      Dept-->
    	<typeAliases>
    		<typeAlias type="cn.mybatis.entity.Dept" alias="Dept"/>
    	</typeAliases>
    	
    	<environments default="development">
    		<environment id="development">
    			<transactionManager type="JDBC" />
    			<dataSource type="POOLED">
    			    <property name="driver" value="oracle.jdbc.OracleDriver" />
    				<property name="url" value="jdbc:oracle:thin:@localhost:1522:orc" />
    				<property name="username" value="bxq" />
    				<property name="password" value="bxq" />
    			</dataSource>
    		</environment>
    	</environments>
    	<!--关联小配置-->
    	<mappers>
    		<mapper resource="cn/mybatis/entity/Dept.xml" />
    		<mapper resource="cn/mybatis/entity/Dept2.xml" />
    	</mappers>
    	
    
    </configuration>
    

    1.3编写Dept实体类

    package cn.mybatis.entity;
    
    public class Dept {
    	private Integer deptNo;//部门编号
    	private String deptName;//部门名称
    	private String deptCity;//部门所在地址
    	public String getDeptCity() {
    		return deptCity;
    	}
    	public void setDeptCity(String deptCity) {
    		this.deptCity = deptCity;
    	}
    	public Integer getDeptNo() {
    		return deptNo;
    	}
    	public void setDeptNo(Integer deptNo) {
    		this.deptNo = deptNo;
    	}
    	public String getDeptName() {
    		return deptName;
    	}
    	public void setDeptName(String deptName) {
    		this.deptName = deptName;
    	}
    	@Override
    	public String toString(){
    		return "Dept [deptNo= " + deptNo +", deptName=" + deptName+",deptCity"+deptCity+"]";
    	}
    }

    1.4编写Dept.xml小配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="cn.mybatis.entity.Dept">
    
    <resultMap type="Dept" id="resultMapper">
    	<result property="deptName" column="deptName"/>
    	<result property="deptNo" column="deptNo"/>
    	<result property="deptCity" column="deptCity"/>
    </resultMap>
         <!--代替"*"的方法-->
    	<sql id="columns">
              <!--植入所需要的列名--> deptNo,deptName,deptCity </sql>   <!--++++++++++++++++++++++++++resultMap 实现结果映射++++++++++++++++++++--> <!-- 查询部门信息 resultMap 实现结果映射 --> <select id="selectAllDeptMapper" resultMap="resultMapper"> select * from dept </select> <!-- 代替"*" 连接sql标签的id="columns"--> <select id="selectAllDeptUseAlias" resultType="Dept"> select <include refid="columns"/> from dept </select> <!-- +++++++++++++++++++++++++++++++分割线+++++++++++++++++++++++++++ --> <!-- 1.1查询部门所有信息 --> <select id="selectAllDept" resultType="Dept"> <!--查询所有部门信息 --> <!-- SQL不区分大小写 --> select * from dept </select> <!-- 增加部门信息 --> <insert id="insertDept" parameterType="Dept"> insert into dept values(#{deptNo},#{deptName},#{deptCity}) </insert> <!-- 删除信息 --> <delete id="deleteDept" parameterType="Dept"> delete from dept where deptNo=#{deptNo} </delete> <!-- 修改信息 --> <update id="updateDept" parameterType="Dept"> update dept set deptName=#{deptName} where deptNo=#{deptNo} </update> <!-- 模糊查询 --> <select id="likeDept" parameterType="Dept" resultType="Dept"> select * from dept where deptName like '%${deptName}%' </select> </mapper>

    1.5书写MyTest测试类

    package cn.mybatis.Test;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.util.List;
    
    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.junit.Before;
    import org.junit.Test;
    
    import cn.mybatis.entity.Dept;
    
    public class MyTest {
    	
    	SqlSession session;
    	@Before
    	public void initData() throws IOException{
    		   Reader  reader=Resources.getResourceAsReader("mybatis-config.xml");		   
    		  SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);		   
    		  session= factory.openSession();
    	}	
    	 @Test
    	   public void testselectAllDept() throws IOException{
    		  //在xml配置中的一个锁定唯一SQL的id
    		  List<Dept> selectList = session.selectList("selectAllDept");
    		  for (Dept dept : selectList) {
    			  System.out.println(dept);
    		  }
    	   }	
    	 //模糊查詢
    	@Test
    	public void likeTest(){
    		Dept dept = new Dept();
    		dept.setDeptName("市场");
    		List<Dept> list = session.selectList("cn.mybatis.entity.Dept.likeDept",dept);
    		for (Dept item : list) {
    			System.out.println(item);
    		}
    		session.close();
    	}
    	//修改
    	@Test
    	public void updateTest(){
    		Dept dept = new Dept();
    		dept.setDeptNo(5);
    		dept.setDeptName("开发部");
    		int count = session.update("cn.mybatis.entity.Dept.updateDept",dept);
    		session.commit();
    		System.out.println(count+"update ok!!!");
    		session.close();
    	}
    	//删除
    	 @Test
    	   public void testdeleteDept() throws IOException{
    		 Dept dept = new Dept();
    		  dept.setDeptNo(8);
    		  int count = session.delete("cn.mybatis.entity.Dept.deleteDept",dept);
    		  session.commit();
    		  System.out.println(count+"del ok!");
    	   }
    	 //增加
    	 @Test
    	   public void testinsertDept() throws IOException{
    		 Dept dept = new Dept();
    		 dept.setDeptNo(8);
    		 dept.setDeptName("财务部1");
    		 dept.setDeptCity("上海");
    		  int count = session.insert("cn.mybatis.entity.Dept.insertDept",dept);
    		  session.commit();
    		  System.out.println(count+"insert ok!!!");
    	   }
    	 
    	 
    	 /*
    	  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    	  *  resultMap的使用
    	  */
    	 
    	 
    	@Test
    	public void testresultMap() throws IOException{
    		List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptMapper");
    		for (Dept dept : list) {
    			System.out.println(dept);
    		}
    		session.close();
    	}
    	@Test
    	public void selectAllDeptUseAlias() throws IOException{
    		List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptUseAlias");
    		for (Dept dept : list) {
    			System.out.println(dept);
    		}
    		session.close();
    	}
    	 
    	/*
    	 * 动态查询+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    	 */
    	@Test
    	 public void TestdynamicSelect() throws IOException{
    		 Dept dept = new Dept();
    		 dept.setDeptName("市场部");
    		 dept.setDeptNo(4);
    		 dept.setDeptCity("北京");
    		 List<Dept> list = session.selectList("cn.mybatis.dao.IDeptDao.dynamicSelect",dept);
    		 for (Dept dept2 : list) {
    			System.out.println(dept2);
    		}
    	 }
    	//动态修改
    	@Test
    	 public void Testdynamicupdate() throws IOException{
    		 Dept dept = new Dept();
    		 dept.setDeptName("市场部1");
    		 dept.setDeptNo(4);
    		 dept.setDeptCity("北京");
    		int count = session.update("cn.mybatis.dao.IDeptDao.dynamicUpdate",dept);
    			System.out.println(count);
    			session.close();
    		}	 
    }
    

    由于测试方法过多我们简单的运行出来一二个看一下结果

    查询:

    删除:

    2. 动态查询

    2.1编写Dept2.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="cn.mybatis.dao.IDeptDao">
    	<!-- 1.1查询部门所有信息 -->
    		<select id="selectDeptByNo" parameterType="int" resultType="Dept">
    		<!--查询所有部门信息  -->
    		<!-- SQL不区分大小写 -->
    			select * from dept where deptNo=#{deptNo}
    		</select>
    		
    		<select id="getMapper" resultType="Dept">
    			select * from dept
    		</select>
    		
    		<!-- 动态查询 -->
    		<select id="dynamicSelect" parameterType="Dept" resultType="Dept">
    			select * from dept
    			<where>
    				<if test="deptNo!=null">
    					and deptNo=#{deptNo}
    				</if>
    				<if test="deptName!=null">
    					and deptName=#{deptName}
    				</if>
    				<if test="deptCity!=null">
    					and deptCity=#{deptCity}
    				</if>
    			</where>
    		</select>
    		
    		
    		<!-- 动态修改 -->
    		<select id="dynamicUpdate" parameterType="int" resultType="Dept">
    			update dept
    			<set>
    				<if test="deptNo!=null">
    					 deptNo=#{deptNo},
    				</if>
    				<if test="deptName!=null">
    					 deptName=#{deptName},
    				</if>
    				<if test="deptCity!=null">
    					 deptCity=#{deptCity},
    				</if>
    			</set>
    				where deptNo=#{deptNo}
    		</select>
    		
    		
    	</mapper>

    2.3在1.5 书写MyTest测试类中可找到我们需要的测试类

    /*
    	 * 动态查询+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    	 */
    	@Test
    	 public void TestdynamicSelect() throws IOException{
    		 Dept dept = new Dept();
    		 dept.setDeptName("市场部");
    		 dept.setDeptNo(4);
    		 dept.setDeptCity("北京");
    		 List<Dept> list = session.selectList("cn.mybatis.dao.IDeptDao.dynamicSelect",dept);
    		 for (Dept dept2 : list) {
    			System.out.println(dept2);
    		}
    	 }
    	//动态修改
    	@Test
    	 public void Testdynamicupdate() throws IOException{
    		 Dept dept = new Dept();
    		 dept.setDeptName("市场部1");
    		 dept.setDeptNo(4);
    		 dept.setDeptCity("北京");
    		int count = session.update("cn.mybatis.dao.IDeptDao.dynamicUpdate",dept);
    			System.out.println(count);
    			session.close();
    		}	
    

    2.4运行结果

    动态查询

    动态修改

      3.resultMap实现结果映射

    3.1 先前在 1.4编写Dept.xml小配置文件中已经配置好了需要用到的条件。

     /*
    	  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    	  *  resultMap的使用
    	  */
    	 
    	 
    	@Test
    	public void testresultMap() throws IOException{
    		List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptMapper");
    		for (Dept dept : list) {
    			System.out.println(dept);
    		}
    		session.close();
    	}
    	@Test
    	public void selectAllDeptUseAlias() throws IOException{
    		List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptUseAlias");
    		for (Dept dept : list) {
    			System.out.println(dept);
    		}
    		session.close();
    	}
    

    3.2测试类 与1.5书写MyTest测试类中可见  

     /*
    	  * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    	  *  resultMap的使用
    	  */
    	 
    	 
    	@Test
    	public void testresultMap() throws IOException{
    		List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptMapper");
    		for (Dept dept : list) {
    			System.out.println(dept);
    		}
    		session.close();
    	}
    	@Test
    	public void selectAllDeptUseAlias() throws IOException{
    		List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptUseAlias");
    		for (Dept dept : list) {
    			System.out.println(dept);
    		}
    		session.close();
    	}
    

    3.3测试结果

    testresultMap();

    selectAllDeptUseAlias();

     4.session.getMapper()方法

    4.1

     创建IDeptDao接口

    package cn.mybatis.dao;
    
    import java.util.List;
    
    import cn.mybatis.entity.Dept;
    /**
     * 接口
     * @author xiaobai
     *
     */
    public interface IDeptDao {
    	public Dept selectDeptByNo(Integer deptNo);
    
    	public List<Dept> getMapper();
    }

     4.2编写MyTest2测试类

    package cn.mybatis.Test;
    
    import java.io.IOException;
    import java.io.Reader;
    import java.util.List;
    
    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.junit.Before;
    import org.junit.Test;
    
    import cn.mybatis.dao.IDeptDao;
    import cn.mybatis.entity.Dept;
    
    public class MyTest2 {
    	SqlSession session;
    	@Before
    	public void initData() throws IOException{
    		   Reader  reader=Resources.getResourceAsReader("mybatis-config.xml");		   
    		  SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);		   
    		  session= factory.openSession();
    	}	
    	//实现getMapper接口
         //按条件查询 @Test public void TestgetMapper(){ IDeptDao mapper = session.getMapper(IDeptDao.class); Dept dept = mapper.selectDeptByNo(5); System.out.println(dept.getDeptName()); session.close(); } //查询全部信息 @Test public void TestgetMapper1() throws Exception{ IDeptDao mapper = session.getMapper(IDeptDao.class); List<Dept> list=mapper.getMapper(); for (Dept dept : list) { System.out.println(dept.getDeptName()); } } }
    
    
    4.3测试结果:
    查询全部信息

    
    
    
  • 相关阅读:
    【HBase】三、HBase和RDBMS的比较
    【HBase】二、HBase实现原理及系统架构
    【HBase】一、分布式数据库HBase简介
    【LeetCode】9、Palindrome Number(回文数)
    【LeetCode】7、Reverse Integer(整数反转)
    【HDFS】四、HDFS的java接口
    【HDFS】三、HDFS命令行接口
    【HDFS】二、HDFS文件读写流程
    【HDFS】一、HDFS简介及基本概念
    【Redis】四、Redis设计原理及相关问题
  • 原文地址:https://www.cnblogs.com/baixingqiang/p/5881697.html
Copyright © 2011-2022 走看看