• mybatis实现MySQL数据库的增删改查之二


    针对于上一篇文章的后续学习如下:

    configuration(配置)

    properties(属性)

      这些属性可以在外部进行配置,并可以进行动态替换。首先你需要在资源文件下建一个db.properties文件,如下

      db.properties文件如下:

    1 driver = com.mysql.jdbc.Driver
    2 url = jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    3 username = root
    4 password = root

     之后在mybatis-config.xml文件下导入db.properties配置文件

    1     <properties resource="db.properties"/>
    2 或
    3 <properties resource="db.properties">
    4   <property name="password" value="1234"/>
    5 </properties>

    这样mybatis-config.xml文件就类似于把db.properties文件包含进去了,于是就可以取得里面的数据

     1     <environments default="development">
     2         <environment id="development">
     3             <transactionManager type="JDBC"/>
     4             <dataSource type="POOLED">
     5                 <property name="driver" value="${driver}"/>
     6                 <property name="url" value="${url}"/>
     7                 <property name="username" value="${username}"/>
     8                 <property name="password" value="${password}"/>
     9             </dataSource>
    10         </environment>
    这里需要特别注意:
    如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
    首先读取在 properties 元素体内指定的属性。
    然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
    最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。

     settings(设置)

    这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

    一个配置完整的 settings 元素的示例如下:

     1 <settings>
     2   <setting name="cacheEnabled" value="true"/>
     3   <setting name="lazyLoadingEnabled" value="true"/>
     4   <setting name="multipleResultSetsEnabled" value="true"/>
     5   <setting name="useColumnLabel" value="true"/>
     6   <setting name="useGeneratedKeys" value="false"/>
     7   <setting name="autoMappingBehavior" value="PARTIAL"/>
     8   <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
     9   <setting name="defaultExecutorType" value="SIMPLE"/>
    10   <setting name="defaultStatementTimeout" value="25"/>
    11   <setting name="defaultFetchSize" value="100"/>
    12   <setting name="safeRowBoundsEnabled" value="false"/>
    13   <setting name="mapUnderscoreToCamelCase" value="false"/>
    14   <setting name="localCacheScope" value="SESSION"/>
    15   <setting name="jdbcTypeForNull" value="OTHER"/>
    16   <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    17 </settings>

    typeAliases(类型别名)

    类型别名可为 Java 类型设置一个缩写名字。它仅用于 XML 配置,意在降低冗余的全限定类名书写

    当这样配置时,User 可以用在任何使用 com.qijian.pojo.User 的地方

     每一个在包 com.qijian.pojo 中的 Java Bean
    在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。
    比如 com.qijian.pojo.User 的别名为 user
    若有注解,则别名为其注解值
    @Alias(”别名")
    1     <typeAliases>
    2         <typeAlias alias="User" type="com.qijian.pojo.User"/>
    3         <package name="com.qijian.pojo.User"/>
    4     </typeAliases>

    environments(环境配置)

      MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

      不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

      environments 元素定义了如何配置环境,如下。

     1 <environments default="development">
     2  <environment id="development">
     3    <transactionManager type="JDBC">
     4      <property name="..." value="..."/>
     5    </transactionManager>
     6    <dataSource type="POOLED">
     7      <property name="driver" value="${driver}"/>
     8      <property name="url" value="${url}"/>
     9      <property name="username" value="${username}"/>
    10      <property name="password" value="${password}"/>
    11    </dataSource>
    12  </environment>
    13 </environments>
    • 配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过default指定)

    • 子元素节点:environment

      • dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

      • 数据源是必须配置的。

      • 有三种内建的数据源类型

        type="[UNPOOLED|POOLED|JNDI]")
      • unpooled:这个数据源的实现只是每次被请求时打开和关闭连接。

      • pooled:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得并发 Web 应用快速响应请求的流行处理方式。

      • jndi:这个数据源的实现是为了能在如 Spring 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。

      • 数据源也有很多第三方的实现,比如dbcp,c3p0,druid等等....

      • 详情:点击查看官方文档

      • 这两种事务管理器类型都不需要设置任何属性。

      • 具体的一套环境,通过设置id进行区别,id保证唯一!

      • 子元素节点:transactionManager - [ 事务管理器 ]

        1 <!-- 语法 -->
        2 <transactionManager type="[ JDBC | MANAGED ]"/>
      • 子元素节点:数据源(dataSource)

    mappers(映射器)

      每一个Mapper.xml都需要在Mybatis核心配置文件中注册
    注意:
    使用class绑定注册时,接口和它的Mapper配置文件必须同名
    使用class绑定注册时,接口和它的Mapper配置文件必须在同一个包下
    1     <mappers>
    2         <mapper resource="com/qijian/dao/UserMapper.xml"/>
    3 <!--        <mapper class="com.qijian.dao.UserMapper"/>-->
    4     </mappers>
    
    

    值得注意的是这些元素需要按照一定的顺序来书写,不然会出现如下错误:

    下面贴上部分代码(其余代码请看上一篇mybatis实现MySQL数据库的增删改查之一 ):

     1 package com.qijian.dao;
     2 
     3 import com.qijian.pojo.User;
     4 
     5 import java.util.List;
     6 
     7 public interface UserMapper {
     8 
     9     //查询全部用户
    10     List<User> getUserList();
    11 
    12     //根据id查询用户
    13     User getUserById(int id);
    14 
    15     //insert一个用户
    16     int addUser(User user);
    17 
    18     //修改一个用户
    19     int updateUser(User user);
    20 
    21     //删除一个用户
    22     int deleteUser(int id);
    23 
    24 }
     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="com.qijian.dao.UserMapper">
     6     <select id="getUserList" resultType="User">
     7         select * from mybatis.user
     8     </select>
     9 
    10     <select id="getUserById" parameterType="int" resultType="com.qijian.pojo.User">
    11         select *from mybatis.user where id = #{id};
    12     </select>
    13 
    14     <insert id="addUser" parameterType="com.qijian.pojo.User">
    15         insert into mybatis.user(id,name,pwd) values(#{id},#{name},#{pwd});
    16     </insert>
    17 
    18 
    19     <update id="updateUser" parameterType="com.qijian.pojo.User">
    20         update mybatis.user
    21         set name = #{name},pwd = #{pwd}
    22         where id=#{id};
    23     </update>
    24 
    25     <delete id="deleteUser" parameterType="int">
    26         delete from mybatis.user  where id=#{id};
    27     </delete>
    28 
    29 </mapper>

    db.properties文件如下

    1 driver = com.mysql.jdbc.Driver
    2 url = jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8
    3 username = root
    4 password = root

    mybatis-config.xml文件如下:

     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 
     6 <configuration>
     7 
     8     <!--如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
     9     首先读取在 properties 元素体内指定的属性。
    10     然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
    11     最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
    12     -->
    13     <properties resource="db.properties">
    14         <property name="password" value="1234"/>
    15     </properties>
    16 
    17 <!--    这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为-->
    18 <!--    <settings>-->
    19 <!--        <setting name="" value=""/>-->
    20 <!--    </settings>-->
    21 
    22 <!--    类型别名可为 Java 类型设置一个缩写名字。
    23         它仅用于 XML 配置,意在降低冗余的全限定类名书写
    24         当这样配置时,User 可以用在任何使用 com.qijian.pojo.User 的地方
    25         -->
    26 <!--    每一个在包 com.qijian.pojo 中的 Java Bean,
    27         在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。
    28         比如 com.qijian.pojo.User 的别名为 user;
    29         若有注解,则别名为其注解值
    30         @Alias(”别名")-->
    31     <typeAliases>
    32         <typeAlias alias="User" type="com.qijian.pojo.User"/>
    33         <package name="com.qijian.pojo.User"/>
    34     </typeAliases>
    35 
    36     <environments default="development">
    37         <environment id="development">
    38             <transactionManager type="JDBC"/>
    39             <dataSource type="POOLED">
    40                 <property name="driver" value="${driver}"/>
    41                 <property name="url" value="${url}"/>
    42                 <property name="username" value="${username}"/>
    43                 <property name="password" value="${password}"/>
    44             </dataSource>
    45         </environment>
    46 
    47     </environments>
    48 
    49 <!--    每一个Mapper.xml都需要在Mybatis核心配置文件中注册-->
    50 <!--    注意:
    51         使用class绑定注册时,接口和它的Mapper配置文件必须同名
    52         使用class绑定注册时,接口和它的Mapper配置文件必须在同一个包下-->
    53     <mappers>
    54         <mapper resource="com/qijian/dao/UserMapper.xml"/>
    55 <!--        <mapper class="com.qijian.dao.UserMapper"/>-->
    56     </mappers>
    57 
    58 </configuration>

     测试类如下:

     1 package com.qijian.dao;
     2 
     3 import com.qijian.pojo.User;
     4 import com.qijian.utils.MyBatisUtils;
     5 import org.apache.ibatis.session.SqlSession;
     6 import org.junit.Test;
     7 
     8 import java.io.IOException;
     9 import java.util.List;
    10 
    11 public class UserDaoTest {
    12     @Test
    13     public void testGetUserLike() throws IOException {
    14         SqlSession sqlSession = MyBatisUtils.getSqlSession();
    15         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    16         List<User> UserList = userMapper.getUserList();
    17 
    18         for (User user:UserList) {
    19             System.out.println(user);
    20         }
    21 
    22     } 
    23 
    24 }

    结构:

    注意:

      该项目的改进主要是针对mybatis-config.xml文件

  • 相关阅读:
    拓扑排序笔记
    Codeforces Round #683 (Div. 2, by Meet IT)(A->C)(构造,思维,贪心)
    Acwing 846. 树的重心(DFS枚举删除每一个点)
    Acwing 125. 耍杂技的牛(贪心)(从局部到全局)
    Acwing 802. 区间和(下标离散化+vector+二分)
    Acwing 799. 最长连续不重复子序列(双指针)
    Acwing 139. 回文子串的最大长度(前缀+后缀处理+哈希+二分)
    Linux shell 变量$#,$@,$0....的含义
    一双不锈钢筷子 的测试用例?
    OSI模型 TCP/IP模型 再整理
  • 原文地址:https://www.cnblogs.com/cnqijian/p/14212233.html
Copyright © 2020-2023  润新知