一,mybatis中常见的问题
1,实体类的属性名和数据库的名称不一致时
(1)可以修改sql语句来使他们匹配
select id as userId ,username as userName from user
(2)也可以采用配置的方式来将实体类的属性名和数据库的名称一一匹配
<resultMap id="?" type="?">
<id property="属性" column="列名">
<resultMap>
二,mybatis常用标签
1,SqlMapConfig.xml中
(1)environments标签
配置环境,如mysql的环境
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源(连接池)-->
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/user?serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
(2)mappers标签
指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件
<mappers>
<mapper resource="com/star/Dao/IUserDao.xml"></mapper>
</mappers>
用注解来配置的话,此处应该用class属性指定被注解的dao全限定类名
<mappers>
<mapper class="com.star.Dao.IUserDao"></mapper>
</mappers>
(3)typeAliases标签
用于配置别名
<typeAliases>
<!-- typeAlias用于配置别名,type属性指定的是实体类全限定类名。alias属性指定别名,当指定了别名就不再区分大小写-->
<typeAlias type="com.star.domain.User" alias="user"></typeAlias>
<!--用于指定要 配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写-->
<package name="com.star.domain"/>
</typeAliases>
(4)properties标签
可以在标签内部配置连接数据库的信息,也可以通过属性引用外部配置文件信息
resource属性:
用于指定配置文件的位置,是按照类路径来写的,并且必须存在类路径下。
<properties resource="jdbcConfig.properties">
<!--
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/user?serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
-->
</properties>
(4) settings标签
配置开启二级缓存
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
2,dao类对应的配置文件
(1)resultMap标签
配置查询结果的列名和实体类的属性名的对应关系
<resultMap id="userMap" type="com.star.domain.User">
<!-主键字段的对应
<id property="userId" column="id"></id>-->
<!--非主键字段的对应
<result property="userName" column="username"></result>
</resultMap>-->
三,mybatis常用注解
1,数据库语句相关注解
(1)@Select
@Select("select * from user")
(2)@Insert
@Insert("insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})")
(3) @Update
@Update("update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address} where id=#{id}")
(4)@Delete
@Delete("delete from user where id=#{id}")
(5) @Result
用于开启多对多的注解
@Results(id="userMap",value={
@Result(id = true,column = "id",property = "userId"),
@Result(column = "username",property = "userName"),
@Result(column = "sex",property = "userSex"),
@Result(column = "address",property = "userAddress"),
@Result(column = "birthday",property = "userBirthday"),
@Result(property = "accounts",column = "id",many = @Many(select = "com.star.dao.IAccountDao.findAccountByUid",fetchType = FetchType.LAZY))
})