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文件

原文地址:https://www.cnblogs.com/cnqijian/p/14212233.html