• Mybatis


     mybatis-config.xml 配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <!-- 通过这个配置标签,完成mybatis与数据库的连接 -->
    <configuration>
    	<!-- 引入jdbc.properties文件 -->
    	<properties resource="jdbc.properties"></properties>	
    	
    	<!-- 配置mybatis的log实现为LOG4J -->
    	<settings>
    		<setting name="logImpl" value="LOG4J"/>
    		<!-- 设置全局缓存 -->
    		<setting name="cacheEnabled" value="true"/>
    	</settings>
    	
    	<!-- 引入与数据库表对应的javaBean的包 注意:别名为类名首字母大写 :User -->
    	<typeAliases>
    		<package name="com.pp.pojo"/>
    	</typeAliases>
    	
    	
    	<environments default="development">
    		<environment id="development">
    			<!-- 配置事务管理 采用jdbc -->
    			<transactionManager type="JDBC"></transactionManager>
    			<!-- POOLED是mybatis的数据源,jndi是基于tomcat的数据源 -->
    			<dataSource type="POOLED">
    				<property name="driver" value="${driver}"/>
    				<property name="url" value="${url}?useUnicode=true&characterEncoding=utf8"/>
    				<property name="username" value="${username}"/>
    				<property name="password" value="${password}"/>
    			</dataSource>
    		</environment>
    	</environments>
    	<!-- 引入mapper.xml文件 -->
    	<mappers>
    		<mapper resource="com/pp/dao/UserMapper.xml"/>
    		<mapper resource="com/pp/dao/RoleMapper.xml"/>
    	</mappers>	
    </configuration>
    

      

    连接数据库的配置文件: jdbc.properties(这个文件要引入mybatis配置文件中)

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://127.0.0.1:3306/testdb
    username=root
    password=123
    

      

    Mapper配置文件:  UserMapper.xml(专门存储sql语句的配置文件)(这个文件要引入mybatis配置文件中)

    <?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="com.pp.dao.UserMapper">
    
    
    	<!--1. -->
    	<!-- 因为返回一条数据 类型用int接收 -->
    	<select id="count" resultType="int">
    		select count(1) from user
    	</select>
    
    	
    	<!-- 2. -->
    	<!-- Bean中的Object属性用association标签表示 association标签中的result为role对象的属性 -->
    	<!-- javaType为Role是因为别名   -->
    	<resultMap type="User" id="userMap">
    		<result property="id" column="id"/>
    		<result property="userName" column="userName"/>
    		<result property="userCode" column="userCode"/>
    		<result property="userPassword" column="userPassword"/>
    		<association property="role" javaType="Role">
    			<result property="roleName" column="roleName"/>
    		</association>
    	</resultMap> -->
    	
    
    	<!--3. -->
    	<!-- type为User 这个返回结果是User对象 property是属性 addressList是集合 ofType是集合中的对象,即泛型 -->
    	<!-- 对象属性为集合 用collection标签表示 标签里面的是集合中对象(泛型对象)的属性 -->
    	<resultMap type="User" id="getAddressByUserMap">
    		<result property="id" column="userId"/>
    		<collection property="addressList" ofType="Address">
    			<id property="id" column="a_id"/>
    			<result property="postCode" column="postCode"/>
    			<result property="addressContent" column="addressContent"/>
    		</collection>
    		
    	</resultMap>
    	<!--  resultMap对应标签,标签 -->
    	<!-- parameterType为调用方法时的参数类型  -->
    	<select id="getAddressByUser" resultMap="getAddressByUserMap" parameterType="User">
    		select *,a.id as a_id from user u,address a where u.id=a.userId and u.id=#{id} 
    	</select>
    
    
    </mapper>
    

      

    test类(junit)  增删改需要sqlSession.commit();提交事务

    private Logger logger=Logger.getLogger(this.getClass());
    	@Test
    	public void conTest(){
    
    		String resources="mybatis-config.xml";
    		int count = 0;
    		SqlSession sqlSession=null;
    		InputStream is=null;
    		
    		try {
    			//1.读取配置文件输入流
    			is=Resources.getResourceAsStream(resources);
    
    			//2.创建sqlSessionFactory对象,完成对配置文件的读取
    			SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
    
    			//3.创建sqlSessin对象
    			sqlSession=sqlSessionFactory.openSession();
    
    			//4.调用mapper.xml文件进行数据操作
    			count=sqlSession.selectOne("com.pp.dao.UserMapper.count");
    			
    			//测试输出
    			logger.debug(count);
    
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} finally{
    			sqlSession.close();
    			try {
    				is.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		
    		
    		Assert.assertEquals(5, count);
    		
    	}
    	
    		
    

    mybatis特性之一
    动态sql

    涉及标签:
    if
    choose when otherwise
    trim where set
    foreach
    
    1.
    <select id="getRoleList"  resultType="Role" parameterType="Role">
    	select * from role	
    	<where>
    		<choose>
    			<when test="roleCode!=null">
    				and roleCode like CONCAT('%',#{roleCode},'%') 
    			</when>
    			<when test="roleName!=null">
    				and roleName like CONCAT('%',#{roleName},'%')
    			</when>
    			<otherwise></otherwise>
    		</choose>
    	</where>
    </select>
    
    
    //where 标签相同sql语句where 智能省略第一个判断的and,就不用加 1=1 这样的语句
    //choose 标签相同switch	 
    //when 标签相同case   当满足一个条件时,追加sql语句后,跳出choose
    //otherwise 标签相同switch中的default   当所有条件都不满足时,执行此标签内的语句
    
    
    2.
    <where>
    	<if test="roleCode!=null">
    		and roleCode like CONCAT('%',#{roleCode},'%') 
    	</if>
    	<if test="roleName!=null">
    		and roleName like CONCAT('%',#{roleName},'%')
    	</if>
    
    </where>
    
    //if标签 判断如满足条件则追加语句
    
    
    3.
    <trim prefix="where" prefixOverrides="and|or">
    	<when test="roleCode!=null">
    		and roleCode like CONCAT('%',#{roleCode},'%') 
    	</when>
    	<when test="roleName!=null">
    		and roleName like CONCAT('%',(#roleName),'%')
    	</when>
    </trim>
    
    //trim标签 追加where关键字 间隔符是and 或者 or   trim也会在满足第一个条件时,舍去其语句中and
    
    
    
    4.
    <update id="updateRole" parameterType="Role">
    	update role
    	<set>
    		<if test="roleCode!=null and roleCode!=''">
    				roleCode=#{roleCode},
    		</if>
    		<if test="roleName!=null">
    			roleName=#{roleName}
    		</if>
    	</set>
    	where id=#{id}
    </update>
    
    //update 也有set标签  添加set关键字 后面判断条件追加语句
    
    
    
    5.
    <update id="updateRole" parameterType="Role">
    	update role
    	<trim prefix="set" prefixOverrides=",">
    		<if test="roleCode!=null and roleCode!=''">
    			roleCode=#{roleCode},
    		</if>
    		<if test="roleName!=null">
    			roleName=#{roleName}
    		</if>
    	</trim>
    	where id=#{id}
    </update>
    
    
    //trim标签 前缀为set 意为追加set关键字 prefixOverrides值,  间隔符号为,
    
    
    
    6.
    <resultMap type="User" id="userMapBydepId">
    	<result property="id" column="id"/>
    	<result property="userCode" column="userCode"/>
    	<result property="userName" column="userName"/>
    </resultMap> 
    <!-- 传入的参数如果是数组 key:array 集合 key:list-->
    <select id="getUserBydepIds" resultMap="userMapBydepId" >
    	select * from user where depId in
    	<foreach collection="array" item="depIds" open="(" separator="," close=")">
    		#{depIds}
    	</foreach>
    			
    </select>
    	
    //select * from user where depId in(1,2)  查询表user字段depId为1和2的数据
    //数组collection为array
    //open,separator,close 定义in后面的格式 :(?,?)
    //不需要写parameterType
    
    <select id="getUserBydepIds" resultMap="userMapBydepId" >
    	select * from user where depId in
    	<foreach collection="list" item="depIds" open="(" separator="," close=")">
    		#{depIds}
    	</foreach>
    			
    </select>
    
    //集合collection为list
    

      

    关于缓存
    一级缓存 session作用域
    二级缓存 全局作用域

    全局缓存
    mybatis配置文件:

    <settings>
         <setting name="cacheEnabled" value="true"/>
    </settings>    
    

      

    开一级缓存的话 一定要开全局缓存 不生效
    在mapper.xml中设置缓存 默认不开启

    <cache eviction="FIFO" flushInterVal="60000" size="512" readOnly="true"/>
    

      

  • 相关阅读:
    mysql 之 union 分类: database 测试 2014-02-12 11:59 218人阅读 评论(0) 收藏
    MySql模糊查询like通配符使用详细介绍 分类: database 测试 2014-02-12 10:19 6829人阅读 评论(1) 收藏
    sed(查找替换) 与awk(提取字段) 分类: ubuntu 测试 2014-02-11 12:08 4074人阅读 评论(0) 收藏
    Linux命令行uniq 分类: ubuntu 测试 2014-02-10 17:52 341人阅读 评论(0) 收藏
    n&1判断奇偶 分类: python基础学习 测试 2014-02-10 15:41 636人阅读 评论(0) 收藏
    vue-cli安装
    input事件
    Edusohu搭建
    Ngxin代理服务基本概述
    五种IO模型---转载
  • 原文地址:https://www.cnblogs.com/m97i/p/7599319.html
Copyright © 2020-2023  润新知