MyBatis 配置文件记录

概念

概念将数据库表中记录的数据查询出来,并封装成一个实体类的对象。SqlSession代表和数据库的一次会话,是用openSession对象实现的,用完必须关闭,释放资源。SqlSession和connection一样都是非线程安全的,每次使用都应该获取新的对象。mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。1  初级的mybatis拥有两个配置文件:全局配置文件 和 映射文件,必须创建mybatis环境。这里用IDEA创建maven项目,只需要在相应的POM文件中写入maven依赖即可。
1.1  pom.xml文件中添加相应依赖# pom.xml<dependencies><!--mybatis依赖-->    <dependency>        <groupId>org.mybatis</groupId>        <artifactId>mybatis</artifactId>        <version>3.4.6</version>    </dependency><!--mysql驱动依赖-->    <dependency>        <groupId>mysql</groupId>        <artifactId>mysql-connector-java</artifactId>        <version>5.7.6</version>    </dependency><!--log4j日志文件系统-->    <dependency>        <groupId>log4j</groupId>        <artifactId>log4j</artifactId>        <version>1.2.17</version>    </dependency><!--这个依赖用于做测试-->        <dependency>        <groupId>org.junit.jupiter</groupId>        <artifactId>junit-jupiter-api</artifactId>        <version>5.3.2</version>        <scope>compile</scope>    </dependency></dependencies><!--这个插件,将应用打包成一个可执行的jar包--><build>    <plugins>        <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>        </plugin>    </plugins></build>

1.2  全局配置文件 mybatis.xml在此映射文件中,只需要指定输入参数类型,返回结果参数类型,sql语句等就差不多了,也就是将原本jdbc所遇到的硬编码问题全部是使用xml配置文件来替代。以下是一个简单的示例。
1.2.1  全部 MyBatis 的配置元素  MyBatis 配置 XML 文件的层次结构。这些层次是不能够颠倒顺序的,如果颠倒顺序,MyBatis 在解析 XML 文件的时候就会出现异常了。<?xml version="1.0" encoding="UTF-8"?><configuration><!--配置-->    <properties/><!--属性-->-------------------------------------------------------------------------    <settions/><!--设置-->        属性:mapUnderscoreToCamelCase        是否开启自动驼峰命名规则(camel cass)映射。        即从经典数据库列名A_COLUMN到经典Java属性名aColumn的类似映射        例如:数据库列名为U_NAME,则Java属性名为uName    数据库表中的字段名称下划线后面的第一个字母,与Java属性名的第一个大写字母相同    例如:    <settings>        <setting name="mapUnderscoreToCamelCase" value="true"/>    </settings>-------------------------------------------------------------------------    <typeAliases><!--别名处理器,为某一个类型命名,不区分大小写-->        <!-- 配置别名role,它代表com.learn.po.Role -->        <typeAliase alias="role" type="com.learn.po.Role"/>        <package name="com.zzfan.framework.entiey"/>        name:指定包名        可以为当前包以及下面所有的包中的每一个类起默认别名        默认别名是类名的全小写        package标签写在typeAliases标签中    </typeAliases>        <!--             起好的别名用在映射文件中            写sql语句的标签的resultType parameterType等标签中         -->
-------------------------------------------------------------------------    <typeHandlers/><!--类型处理器-->-------------------------------------------------------------------------    <objectFactory/><!--对象工厂-->-------------------------------------------------------------------------    <plugins/><!--插件-->-------------------------------------------------------------------------    <environments><!--配置环境-->    <!-- mybatis可以配置多种环境 -->            <environment>        id:当前环境的唯一标识,便于多种开发环境切换        <!-- 必须有以下两个标签 -->            <transactionManager/><!--事务管理器-->            <dataSource/><!--数据源-->        </environment>    </environments>    <!-- 有如下示例 -->    <environments default="development">     <!-- 通过更改default来改变当前环境,达到快速切换的目的 -->        <environment id="development" >            <transactionManager type="JDBC"/>            <dataSource type="POOLED">                <property name="driver" value="${db.driver}"/>                <property name="url" value="${db.url}"/>                <property name="username" value="${db.username}"/>                <property name="password" value="${db.password}"/>            </dataSource>        </environment>        <environment id="test">            ...            <!-- 当前环境用于测试,用到该环境时,只需要修改default的值 -->        </environment>
</environments>-------------------------------------------------------------------------    <databaseIdProvider/><!--数据库厂商标识-->        type属性:得到数据库厂商标识(驱动自带)        mybatis就能根据数据库厂商标识执行不同的sql                <!-- 为不同的数据库厂商起别名 -->        <properties name="MySQL" value="mysql">        然后在映射文件的标签如<select>等有一个databaseId属性,写其对应的别名-------------------------------------------------------------------------    <mappers/><!--映射器-->    每一个mapper标签都注册一个标签,四种方式加载映射文件    1,2注册配置文件 3注册接口    1. <mapper resource="映射文件地址"/>        引用类路径下的sql映射文件,使用相对路径,相对于项目下的。        "mybatis/mybatis-config.xml"    2. <mapper url=""/>         使用绝对路径或者网络路径,一般不用。        "file:///var/mappers/AuthorMapper.xml"    3. <mapper class=""/>      A:接口的全限定名:包括类名以及接口的名称在内的全类名        使用mapper接口的全限定名让mybatis通过全限定名称自己找映射文件        前提:mapper接口的名称必须与映射文件名称相同,并放到同一目录下      B:没有sql映射文件,在接口方法上使用注解        @select("select * from tbl_employee where id = #{id}")    4. <package name=""/>        注册指定包下的所有映射文件        注意:mapper接口的名称必须与映射文件名称相同,并放到同一目录下-------------------------------------------------------------------------</configuration>

1.2.2  配置文件示例<?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"><configuration>    <environments default="development">        <environment id="development">            <!-- 决定事务范围和控制方式的事务管理器(TransactionManager) -->            <transactionManager type="JDBC"/>            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://localhost:3306/test"/>                <property name="username" value="root"/>                <property name="password" value="zzf940227"/>            </dataSource>        </environment>    </environments>
    <!-- 写好的sql映射文件一定要注册到全局配置文件中 -->    <mappers>        <mapper resource="mapper/EmployeeMapper.xml"/>    </mappers></configuration>

1.2.3  引入外部数据库配置信息引用db.properties中的信息,将上述配置信息中的dataSource标签中的内容进行如下修改# 引用外部数据库文件         <dataSource type="POOLED">             <!-- 引用db.properties中的信息,通过${} -->             <property name="driver" value="${db.driver}"/>             <property name="url" value="${db.url}"/>             <property name="username" value="${db.username}"/>             <property name="password" value="${db.password}"/>         </dataSource>
# db.properties文件配置信息db.driver = com.mysql.cj.jdbc.Driverdb.url = jdbc:mysql://localhost:3306/db_test?useUnicode=true&characterEncoding=utf8&aserverTimezone=GMTdb.username = rootdb.password = zzf940227
# 导入properties文件<properties resource = "db.properties">

1.3  映射文件操作  xxxMapper.xml# xxxrMapper.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"><!--namespace:名称空间,随便起(也别太随便),一般是该文件的全限定名    id:唯一标识    resultType:返回值类型(对应的应该是表相应的实体类)    #{id}:从传递过来的参数中取出ID值--><mapper namespace="mapper.xxxMapper">    <select id="selectEmpid" resultType="com.zzfan.test.Mybatis.Employee">        查询操作,这里写sql语句,下面的是示例。    </select>    <insert id="insertid" parameterType="com.zzfan.test.Mybatis.User">        添加操作    </insert>    <delete id="deleteid" parameterType="com.zzfan.test.Mybatis.Employee">        删除操作    </delete>    <update id="deleteid" parameterType="com.zzfan.test.Mybatis.Employee">        更新操作    </update>--------------------------------------------------------------------    <!-- resultMap最终还是要将结果映射到pojo上, -->    <!--        type:指定映射到哪一个pojo        id:  设置ResultMap的id    -->    <resultMap type="order" id="orderResultMap">        <!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->        <!-- property:主键在pojo中的属性名 -->        <!-- column:主键在数据库中的列名 -->        <id property="id" column="id" />        <!-- 定义普通属性 -->        <result property="userId" column="user_id" />        <result property="number" column="number" />        <result property="createTime" column="create_time" />        <result property="note" column="note" />    </resultMap>--------------------------------------------------------------------</mapper>


2  开发DAO的方式在开发中,都是开发DAO接口和DAO实现类,然后再DAO实现类中调用sqlsession的方法对数据库进行增删改查操作。
2.1  DAO接口# xxxDao.javapackage com.zzfan.framework.dao;
import com.zzfan.framework.entity.Employee;
/** * 这个接口就是用来查出Employee,记录数据,并封装成Employee对象 */public interface EmployeeMapper {    public Employee getEmpById(Integer id);}

2.2  DAO接口实现类# xxxDaoImpl.javapublic class UserDaoImpl implements UserDao{    private SqlSessionFactory ssf;    public UserDaoImpl(SqlSessionFactory ssf) {        this.ssf = ssf;    }    public User findUserById(int id) {        SqlSession ss = ssf.openSession();        return ss.selectOne("test.findUserById", id);    }    public void insertUser(User user){        ...    };}

2.3  DAO方式下的映射文件# 部分内容进行修改# mapper标签的namespace属性一般指定为接口的全限定名<mapper namespace="com.zzfan.framework.dao.EmployeeMapper"><!-- select标签的id就是接口的getEmpById()方法 -->    <select id="getEmpById" resultType="com.zzfan.framework.entity.Employee">        select * from tbl_employee where id = #{id}    </select></mapper>
2.4  测试public class MybatisTest {
    @Test    public void test() throws IOException {        // 1、读取配置文件        String resource = "mybatis/mybatis-config.xml";        // 2、获取SqlSessionFactory对象        InputStream inputStream = Resources.getResourceAsStream(resource);        // 3、获取sqlSession实例,能直接执行已经映射的sql语句        SqlSessionFactory sqlSessionFactory =             new SqlSessionFactoryBuilder().build(inputStream);        EmployeeMapper employeeMapper = new EmployeeMapperImpl(sqlSessionFactory);        Employee employee = employeeMapper.getEmpById(1);            }}

  3  Mapper代理开发方式就是开发mapper接口(相当于DAO接口),写配置文件时注意:mapper接口的名称要与mapper映射文件的namespace一致mapper接口的方法名称要和mapper映射文件的statement一致mapper接口的方法参数类型要和mapper映射文件的statement的parameterType一致mapper接口的方法返回值类型要和 mapper映射文件的statement的resultType一致mapper接口的名称要和映射文件的名称相同
补充全局配置文件的标签顺序propertiessettingstypeAliasestypeHandlersobjectFactoryobjectWrapperFactoryreflectorFactorypluginsenvironmentsdatabaseIdProvidermappers

猜你喜欢

转载自www.cnblogs.com/zzfan/p/11091361.html