ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MyBatis核心配置

2021-05-17 20:06:26  阅读:177  来源: 互联网

标签:customer 元素 核心 配置 sqlSession 用于 MyBatis id 属性


MyBatis核心配置


1.SqlSessionFactory

Reader reader =
	Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);

通常每个数据库对应一个SqlSessionFactory,建议使用单例


2.SqlSession

每一个线程都应该有自己的SqlSession实例,使用后及时关闭

SqlSession sqlSession = sqlSessionFactory.openSession();
try{
    //持久化操作
}finally{
    sqlSession.close();
}

3.配置文件

<mapper>元素为根元素

  • <properties>元素

  • 建立db.properties文件

    <properties resource="db.proerties" />
    
    <dataSource type="POOLED">
    	<property name="driver" value="${jdbc.driver}"/>
    	<property name="url" value="${jdbc.url}"/>
    	<property name="username" value="${jdbc.username}"/>
    	<property name="password" value="${jdbc.password}"/>
    </dataSource>
    

  • 使用property子元素

    <property name="" value="" />
    

  • <settings>用来改变MaBatis运行时的行为,开启二级缓存,延迟等

    <!--设置-->
    <settings>
        <setting name="cacheEnabled" value="true" />
        <setting name="lazyLoadingEnabled" value="true" />
        ...
    </settings>
    

  • <typeAliases>用来给配置文件中Java类型设置别名

    <typeAliases>
        <typeAlias alias="user" type="完整包名.User"/>
    </typeAliases>
    

    如果省略Alias则默认类名首字母小写为别名


    也可以使用自动扫描的方式把整个包下的类起别名

    <typeAliases>
        <package name="需要扫描的包"/>
    </typeAliases>
    

    还可以采用注解方式(优先级高)

    @Alias(value="user")
    public class User{
        //....
    }
    

  • <typeHandle>类型处理器 用于完成 javaType到 jdbcType的转换

  • <objectFactory> 对象工厂用于创建结果对象实例 一般不用修改

  • <plugins> 插件

  • <environments>元素 用于配置数据源

    <environments default="mysql">
    	<environment id="mysql">
    		<!--使用JDBC事务管理-->
    		<transactionManager type="JDBC"/>
    		<!--数据库连接池-->
    		<dataSource type="POOLED">
    			<property name="driver" value="${jdbc.driver}"/>
    			<property name="url" value="${jdbc.url}"/>
    			<property name="username" value="${jdbc.username}"/>
    			<property name="password" value="${jdbc.password}"/>
    		</dataSource>
    	</environment>
    </environments>
    
    • default属性:用于指定默认数据源ID
    • transactionManager子元素:配置事务管理器,一般使用Spring自带管理器
    • 数据源类型:UNPOOLED、POOLED、JNDI
  • <mappers>元素 用于指定映射文件的位置

    • 类路径引入

      <mappers>
      	<mapper resource="com/itheima/mapper/CustomerMapper.xml"/>
      </mappers>
      
    • 接口类引入

      <mappers>
      	<mapper class="完整包名.接口名"/>
      </mappers>
      
    • 包名引入

      <mappers>
      	<mapper name="完整包名"/>
      </mappers>
      

4.映射文件

<mapper>元素为根元素

  • <select>元素 用于映射查询语句

    <select id="findCustomerById" parameterType="Integer" 
    	resultType="com.itheima.po.Customer">
    	select * from t_customer where id = #{id}
    </select>
    

    下面列举常用属性:

    属性 说明
    id 元素唯一标识符
    parameterType 传入参数类型
    resultType 返回值类型/集合包含类型
    resultMap resultMap的id引用
    flushCache 查询前是否清理缓存
    useCache 是否开启二级缓存
    fetchSize 获取记录总条数
    resultSetType 结果集类型

  • <insert>元素 用于映射插入语句

    <insert id="addCustomer" parameterType="com.itheima.po.Customer"
            keyProperty="id" useGeneratedKeys="true">
        insert into t_customer(username,jobs,phone)
        values (#{username},#{jobs},#{phone})
    </insert>
    

    列举三个特有属性:

    属性 说明
    keyProperty 将插入或更新时的返回值赋给(输入对象的)某个属性,通常设置为主键对应属性
    keyColumn 用于设置第几列是主键,当不是第一列时需要设置
    useGeneratedKeys 用于获取数据库内部产生的主键,如自动增长字段

    SqlSession sqlSession = MybatisUtils.getSession();
    Customer customer = new Customer();
    customer.setUsername("rose");
    customer.setJobs("student");
    customer.setPhone("13333533092");
    int rows = sqlSession.insert("com.itheima.mapper"
    	+".CustomerMapper.addCustomer",customer);
    
    //输出插入数据的主键id
    System.out.println(customer.getId());
    
    if(rows>0){
    	System.out.println("插入了"+rows+"条数据");
    }else{
    	System.out.println("插入失败");
    }
    sqlSession.commit();
    sqlSession.close();
    

  • <update>和<delete>元素 比较简单略过

  • <sql>元素用于抽出SQL语句中相同的部分

    <mapper namespace="com.itheima.mapper.CustomerMapper">
        <!--抽出重复代码-->
        <sql id="customerColumns">id,username,jobs,phone</sql>
        <!--通过id查询用户-->
        <select id="findCustomerById" parameterType="Integer" resultType="com.itheima.po.Customer">
            select <include refid="customerColumns"/>
            from t_customer where id = #{id}
        </select>
    </mapper>
    

  • <resultMap>元素 用于定义映射规则、级联的更新、类型转化器等。

    <mapper namespace="com.itheima.mapper.UserMapper">
        <!--type 返回的类型-->
        <resultMap id="resultMap" type="com.itheima.po.User">
            <!--主键 column为表中列名-->
            <id property="id" column="t_id"/> 
            <!--普通属性-->
            <result property="name" column="t_name"/>
            <result property="age" column="t_age"/>
        </resultMap>
        <select id="findAllUser" resultMap="resultMap">
            select * from t_user
        </select>
    </mapper>
    

    <association>和<collection>子元素可以实现关联在后面讨论

标签:customer,元素,核心,配置,sqlSession,用于,MyBatis,id,属性
来源: https://www.cnblogs.com/ku1a/p/14778228.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有