mapper.xml中细节

直接上代码:

接口中的抽象方法:

List<Person> findAll();

Person findOneById(Long id);

Integer findCountBySex(Boolean sex);

映射文件中对应的sql:

<?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="cn.itsource.mapper.PersonMapper">
	<select id="findAll" resultType="cn.itsource.domain.Person">
		select * from person 
	</select>

	<select id="findOneById" resultType="Person">
		select * from person where id = #{id}
	</select>
	
	<select id="findCount" resultType="int">
		select count(id) from person where sex = #{sex}
	</select>
</mapper>

你品,你细品~~~

一、属性问题
1、接口中的参数一般都是一个,
因为一般当参数个数>=2时,都会把它们封装为实体类,然后让其作为参数,在xml文件中通过.来获取值;
如果又需要传递多个对象,那么就把它们放在集合(常用List)或数组中,然后其再作为参数,myBatis会把它变成map。
总之,当只有一个参数时,标签不用写parameterType(不写一定不会错,写了反而可能会错),
并且#{id}中的id也可以随便写,写成id是为了见名知意
2、其次,sql操作的返回值resultType,当然增删改是没有返回值的就不用说,
对于查询来说,最容易混淆的就是,当查询结果为多条记录时,比如接口中的第一个方法,它的返回值是list,所以很可能mapper中的resultType就写成list了,
但正确的就应该写实体类的类型,因为myBatis会自动把多条记录放入集合中

二、别名问题
1、parameterType或者resultType本该写对应类型的全限定名,比如java.lang.Long,但是好长哦。。。所以myBatis给一些常用类就取了别名:
在这里插入图片描述
别名是不区分大小写的,比如long、Long、lOnG,都是表示Long,所以为什么基本类型前面要加_
2、自己写的类也是可以起别名的,是要在配置文件mybatis-config.xml里添加typeAlias标签

<!-- 根标签 -->
<configuration>
	<!-- 获取到jdbc.properties中的数据(四大金刚) -->
	<properties resource="jdbc.properties" />
	
	 <!-- 别名的配置,这里注意,标签是有顺序的,百度叭~,或者写错顺序,xml文件会有错误提示;当有properties时,typeAliases必须在其后 -->
	 <typeAliases>
		<!-- 单个配置 -->
		<typeAlias type="cn.itsource.domain.Dept" alias="Dept" />
		
		<!-- 直接配置实体类的包:别名就是对应类名或类名首字母小写 -->
		<package name="cn.itsource.domain" />
	</typeAliases>
	
</configuration>

但是呢,并不提倡给自己写的类用别名,
因为项目是团队开发,可能多个包下面有相同的实体类名,这样容易造成混淆,
所以最好还是用类的全限定名

猜你喜欢

转载自blog.csdn.net/ExceptionCoder/article/details/108710277