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中 不允许使用 ? 得用 & 替换--> <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中 不允许使用 ? 得用 & 替换--> <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>