mybatis的学习2_____配置文件的详解和代码的优化

1.配置文件的解析:

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">
<configuration>

    <properties resource="database.properties"/>

    <!--配置环境 这里可以有多套环境 default是代表默认的那一套环境-->
    <environments default="development">
        <!--环境的id 即环境的名字-->
        <environment id="development">
            <!--transactionManager 事务管理,type:JDBC-->
            <transactionManager type="JDBC"></transactionManager>
            <!--dataSource:数据源-->
            <dataSource type="POOLED">
                <!--xml中 不允许使用 ? 得用 &amp;  替换-->
                <property name="driver" value="${driver}"></property>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--关联映射文件-->
    <mappers>
        <mapper resource="com/xbf/dao/userMapper.xml"/>
    </mappers>

</configuration>
 一些参数的详解:
 configuration: 配置
 <properties resource="database.properties"/> :properties配置文件

 typeAliases   为Java类起别名
 plugins :插件 
environments :环境
 <transactionManager type="JDBC"></transactionManager> JDBC事物管理
 <dataSource type="POOLED">:数据源
 <!--关联映射文件  映射器-->
    <mappers>
        <mapper resource="com/xbf/dao/userMapper.xml"/>
    </mappers>

2.代码的优化:

1.创建database.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username=root
password=1234567890

再在mybatis-config.xml核心配置文件中引入properties,并用${}表达式,引入其中的值;

<?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>

<properties resource="database.properties"/>

<!--配置环境 这里可以有多套环境 default是代表默认的那一套环境-->
<environments default="development">
    <!--环境的id 即环境的名字-->
    <environment id="development">
        <!--transactionManager 事务管理,type:JDBC-->
        <transactionManager type="JDBC"></transactionManager>
        <!--dataSource:数据源-->
        <dataSource type="POOLED">
            <!--xml中 不允许使用 ? 得用 &amp;  替换-->
            <property name="driver" value="${driver}"></property>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </dataSource>
    </environment>
</environments>

<!--关联映射文件-->
<mappers>
    <mapper resource="com/xbf/dao/userMapper.xml"/>
</mappers>

</configuration>

2.优化别名:(目的为了不再useMapper.xml使用全类名,书写繁琐)

在mybatis-config.xml中添加标签 

    <typeAliases>
        <typeAlias type="com.xbf.pojo.User" alias="User"/>
    </typeAliases>

在userMapper.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">

<mapper namespace="com.xbf.dao.UserMapper">
    <select id="getUser" resultType="User">
        select * from user
    </select>

    <insert id="addUser" parameterType="User">

        insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>

    <delete id="deleteById" >
        delete from user where id=#{id}
    </delete>

    <update id="modify" parameterType="User">
        update user set id=#{id},name=#{name} where id=#{id}
    </update>

    <select id="getById" resultType="User">
        select * from user where id=#{id}
    </select>


</mapper>

3.mybatis-config.xml中映射器的编写:

  <mappers>
        <mapper resource="com/xbf/dao/userMapper.xml"/>
    </mappers>

(推荐使用 resource)

4.解决属性名和字段名不一致的情况:

数据库  字段名  id  name  pwd 

POJO   属性名  id name  password 

eg:  select * from user   ==  select  id,name,pwd from user

mybatis会根据数据库的字段名去找对应的实体类的属性名,(他会将所有列名转换为小写,然后去找实体类中对应的 set方法 ,set方法后面的字段就对应数据库的字段名;如果不一样就会返回null)

返回的结果:

[User{id=1, name='狂神', p='null'}, User{id=2, name='老七', p='null'}, User{id=3, name='李四', p='null'}, User{id=4, name='张三', p='null'}]

解决方法:

1.修改set方法;

 public void setPwd(String p) {
        this.p = p;
  }

 

2.给sql的字段取别名;

<select id="getUser" resultType="User">
        select id,name,pwd as p from user
</select>

3.结果集映射ResultMap(最推荐的方式)

    <resultMap id="UserMap" type="User">
        <!--一般通过id标签映射主键-->
        <!--column 数据库的字段名-->
        <!--property pojo中的属性名-->

        <id column="id" property="id"></id>
        <result column="name" property="name"/>
        <result column="pwd" property="p"/>

    </resultMap>
<select id="getUser" resultMap="UserMap">
        select * from user
</select>

 

posted @ 2019-07-23 23:45  德鲁大叔817  阅读(208)  评论(0编辑  收藏  举报