一.驼峰匹配
数据库的字段的驼峰写法与java变量的驼峰写法不一样,导致数据不能匹配。java命名规则:驼峰书写, 大小写区分两个单词的界限。
例: userName;
数据库经典命名规则:两个单词之间,使用下划线分割。
举例:user_name
开启驼峰匹配:相当于去掉数据库名字中的下划线,然后在与java中的属性名进行对应。
数据库中的user_name 和java属性中的 userName 是一样的
1. 配置mybatis-config.xml
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
2. 使用ResultMap结果集替换resulttype
<!--查询所有映射-->
<!--
id:resultMap的标识
type:映射的类型
autoMapping:true(默认) 支持 属性名与字段名自动映射 false:只针对resultMap定义的属性映射
-->
<resultMap id="userResultMap" type="User" autoMapping="true">
<!--id一般作为主键,它有自己的标签,实现属性名与字段名一一映射-->
<id column="id" property="id"/>
<!--除了id以外的字段,用result标签实现属性名与字段名一一映射-->
<result column="user_name" property="userName"/>
<!--如果,属性名与字段一致,可以省略不写-->
<result column="sex" property="sex"/>
</resultMap>
<!--查询所有-->
<select id="queryAllUser" resultMap="userResultMap">
select * from tb_user
</select>
二.resultType优化
mybatis-config.xml
<!--类别名-->
<typeAliases>
<!--方式一:指定具体的实体类-->
<typeAlias type="cn.yanqi.pojo.User" alias="User"/>
<!--方式二:扫描pojo包下所有实体类,类别名不区别大小写。建议大家直接写类名即可-->
<package name="cn.kxx.pojo"/>
</typeAliases>
mapper xml sql 文件就可以直接使用类名或者别名了
<!--resultType 返回的类型,可以直接使用类别名-->
<select id="queryAllUser" resultType="User">
select * from tb_user
</select>
三.environments环境
其实我们后开发中,不止一个环境,例如:开发环境,测试环境,发布环境等可以在项目中设置多环境
mybatis-config.xml
<!--连接数据库-->
<environments default="development">
<!--默认环境-->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<!--指定环境-->
<environment id="dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
java代码使用时连接数据库选择环境
@Before
public void setUp() throws Exception {
//指定核心配置文件的位置
String resource = "mybatis-config.xml";
//加载核心配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//构建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"dev");//使用指定环境
//获取SqlSession对象,SqlSession可以操作crud
sqlSession = sqlSessionFactory.openSession();
//SqlSession进行数据库操作
// userDao = new UserDaoImpl(sqlSession);
userDao = sqlSession.getMapper(UserDao.class);
}
四.mapper映射器
<!--加载mapper映射文件-->
<mappers>
<!--方式一-->
<!--<mapper resource="UserMapper.xml"/>-->
<!--方式二
要求:1、接口名要与mapper的名一致
2、接口类要与mapper.xml文件放在同一目录中
-->
<mapper class="cn.yanqi.mapper.UserMapper"/>
<!--方式三
要求:1、接口名要与mapper的名一致
2、接口类要与mapper.xml文件放在同一目录中
缺点:
1、如果包的路径有很多?2、mapper.xml和mapper.java没有分离。
3、在spring整合的时候可以解决这个问题
-->
<package name="cn.yanqi.mapper"/>
</mappers>
运行时会报错
原因: 使用IDEA加载src下的xml文件会被忽略xml问题
解决方案就是让IDEA不要忽略src目录下的xml文件,在pom.xml文件中添加代码
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>```