林炳文Evankaka原创作品。转自https://blog.csdn.net/Evankaka/article/details/45671473
本文要实现Mybatis多参数查询与列表查询不同方式实现,以一个实例来说明。
一、查询所有数据,返回List
查询出列表,也就是返回list, 在我们这个例子中也就是 List<Employeer> , 这种方式返回数据,需要在Employeer.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的
-
<!-- 定义数据库字段与实体对象的映射关系 -->
-
<resultMap type="Employeer" id="resultMap">
-
<id property="employeer_id" column="employeer_id"/>
-
<result property="employeer_name" column="employeer_name"/>
-
<result property="employeer_age" column="employeer_age"/>
-
<result property="employeer_department" column="employeer_department"/>
-
<result property="employeer_worktype" column="employeer_worktype"/>
-
</resultMap>
id、result是最简单的映射,id为主键映射;result其他基本数据库表字段到实体类属性的映射。
查询列表的语句在 Employeer.xml 中
-
<!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
-
<select id="findEmployeerByName" parameterType="string" resultMap="resultMap">
-
select * from `t_employeer` where employeer_name like #{employeer_name}
-
</select>
在EmployeerMapper 接口中增加方法:public List<Employeer> findEmployeerByName(String employeer_name);
-
/**
-
* 注意要和Employeer.xml的方法名对应
-
*/
-
public List<Employeer> findEmployeerByName(String employeer_name);
测试:
-
/**
-
* 查询列表
-
*/
-
public static List<Employeer> getEmployeerList(String employeer_name){
-
SqlSession session =
null;
-
List<Employeer> employeers=
null;
-
try {
-
session = sqlSessionFactory.openSession();
-
EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
-
employeers = employeerMapper.findEmployeerByName(employeer_name);
-
session.commit() ;
-
}
finally {
-
session.close();
-
}
-
return employeers;
-
-
}
-
public static void main(String[] args) {
-
List<Employeer> employeers=getEmployeerList(
"张三");
-
for(Employeer employeer:employeers){
-
System.out.println(employeer);
-
}
-
-
}
结果:
其中的数据的之前插入的,现在要查找张三的列表全部都列出来了。
二、多参数查询
(1)方法一
EmployeerMapper中定义
-
/**
-
* 多参数查询,注意要和Employeer.xml的方法名对应
-
*/
-
public List<Employeer> findEmployeerByNameandDep(String employeer_name,String employeer_department);
Employeer.xml中定义
-
<!-- 定义数据库字段与实体对象的映射关系 -->
-
<resultMap type="Employeer" id="resultMap">
-
<id property="employeer_id" column="employeer_id"/>
-
<result property="employeer_name" column="employeer_name"/>
-
<result property="employeer_age" column="employeer_age"/>
-
<result property="employeer_department" column="employeer_department"/>
-
<result property="employeer_worktype" column="employeer_worktype"/>
-
</resultMap>
-
<!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
-
<select id=
"findEmployeerByNameandDep" resultMap=
"resultMap">
-
select* from `t_employeer` where employeer_name=#{
0} and employeer_department=#{
1}
-
</select>
由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始
测试代码:
-
/**
-
* 多参数查询列表
-
*/
-
public static List<Employeer> getEmployeerList(String employeer_name,String employeer_department){
-
SqlSession session =
null;
-
List<Employeer> employeers=
null;
-
try {
-
session = sqlSessionFactory.openSession();
-
EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
-
employeers = employeerMapper.findEmployeerByNameandDep(employeer_name, employeer_department);
-
session.commit() ;
-
}
finally {
-
session.close();
-
}
-
return employeers;
-
-
}
-
public static void main(String[] args) {
-
System.out.println(
"=========================使用多单参数查询===========================");
-
List<Employeer> employeers1=getEmployeerList(
"张三",
"产品二部");
-
for(Employeer employeer1:employeers1){
-
System.out.println(employeer1);
-
}
结果:
方法二:
将 resultMap="resultMap" 改成 resultType="Employeer"
-
<!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
-
<select id=
"findEmployeerByNameandDep" resultType=
"Employeer">
-
select* from `t_employeer` where employeer_name=#{
0} and employeer_department=#{
1}
-
</select>
方法三:Map封装多参数
EmployeerMapper.java中添加
-
/**
-
* 多参数查询,注意要和Employeer.xml的方法名对应
-
*/
-
public List<Employeer> findEmployeerByNameandDep1(Map<String,String> map);
Employeer.xml中添加:
-
<!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的,注意key1和key2为传入的map的键值 -->
-
<select id="findEmployeerByNameandDep1" parameterType="map" resultType="Employeer">
-
select* from `t_employeer` where employeer_name=#{key1} and employeer_department=#{key2}
-
</select>
其中map是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个。
测试使用:
-
/**
-
* 多参数查询列表,使用map
-
*/
-
public static List<Employeer> getEmployeerList(Map<String, String> map){
-
SqlSession session =
null;
-
List<Employeer> employeers=
null;
-
try {
-
session = sqlSessionFactory.openSession();
-
EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
-
employeers = employeerMapper.findEmployeerByNameandDep1(map);
-
session.commit() ;
-
}
finally {
-
session.close();
-
}
-
return employeers;
-
-
}
-
System.out.println(
"=========================使用多单参数map方式查询===========================");
-
Map<String, String> map =
new HashMap<String, String>();
-
map.put(
"key1",
"明明");
-
map.put(
"key2",
"财会部");
-
List<Employeer> employeers2=getEmployeerList(map);
-
for(Employeer employeer2:employeers2){
-
System.out.println(employeer2);
-
}
一定要注意key:
结果:
林炳文Evankaka原创作品。转自https://blog.csdn.net/Evankaka/article/details/45671473
本文要实现Mybatis多参数查询与列表查询不同方式实现,以一个实例来说明。
一、查询所有数据,返回List
查询出列表,也就是返回list, 在我们这个例子中也就是 List<Employeer> , 这种方式返回数据,需要在Employeer.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的
-
<!-- 定义数据库字段与实体对象的映射关系 -->
-
<resultMap type="Employeer" id="resultMap">
-
<id property="employeer_id" column="employeer_id"/>
-
<result property="employeer_name" column="employeer_name"/>
-
<result property="employeer_age" column="employeer_age"/>
-
<result property="employeer_department" column="employeer_department"/>
-
<result property="employeer_worktype" column="employeer_worktype"/>
-
</resultMap>
id、result是最简单的映射,id为主键映射;result其他基本数据库表字段到实体类属性的映射。
查询列表的语句在 Employeer.xml 中
-
<!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
-
<select id="findEmployeerByName" parameterType="string" resultMap="resultMap">
-
select * from `t_employeer` where employeer_name like #{employeer_name}
-
</select>
在EmployeerMapper 接口中增加方法:public List<Employeer> findEmployeerByName(String employeer_name);
-
/**
-
* 注意要和Employeer.xml的方法名对应
-
*/
-
public List<Employeer> findEmployeerByName(String employeer_name);
测试:
-
/**
-
* 查询列表
-
*/
-
public static List<Employeer> getEmployeerList(String employeer_name){
-
SqlSession session =
null;
-
List<Employeer> employeers=
null;
-
try {
-
session = sqlSessionFactory.openSession();
-
EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
-
employeers = employeerMapper.findEmployeerByName(employeer_name);
-
session.commit() ;
-
}
finally {
-
session.close();
-
}
-
return employeers;
-
-
}
-
public static void main(String[] args) {
-
List<Employeer> employeers=getEmployeerList(
"张三");
-
for(Employeer employeer:employeers){
-
System.out.println(employeer);
-
}
-
-
}
结果:
其中的数据的之前插入的,现在要查找张三的列表全部都列出来了。
二、多参数查询
(1)方法一
EmployeerMapper中定义
-
/**
-
* 多参数查询,注意要和Employeer.xml的方法名对应
-
*/
-
public List<Employeer> findEmployeerByNameandDep(String employeer_name,String employeer_department);
Employeer.xml中定义
-
<!-- 定义数据库字段与实体对象的映射关系 -->
-
<resultMap type="Employeer" id="resultMap">
-
<id property="employeer_id" column="employeer_id"/>
-
<result property="employeer_name" column="employeer_name"/>
-
<result property="employeer_age" column="employeer_age"/>
-
<result property="employeer_department" column="employeer_department"/>
-
<result property="employeer_worktype" column="employeer_worktype"/>
-
</resultMap>
-
<!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
-
<select id=
"findEmployeerByNameandDep" resultMap=
"resultMap">
-
select* from `t_employeer` where employeer_name=#{
0} and employeer_department=#{
1}
-
</select>
由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始
测试代码:
-
/**
-
* 多参数查询列表
-
*/
-
public static List<Employeer> getEmployeerList(String employeer_name,String employeer_department){
-
SqlSession session =
null;
-
List<Employeer> employeers=
null;
-
try {
-
session = sqlSessionFactory.openSession();
-
EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
-
employeers = employeerMapper.findEmployeerByNameandDep(employeer_name, employeer_department);
-
session.commit() ;
-
}
finally {
-
session.close();
-
}
-
return employeers;
-
-
}
-
public static void main(String[] args) {
-
System.out.println(
"=========================使用多单参数查询===========================");
-
List<Employeer> employeers1=getEmployeerList(
"张三",
"产品二部");
-
for(Employeer employeer1:employeers1){
-
System.out.println(employeer1);
-
}
结果:
方法二:
将 resultMap="resultMap" 改成 resultType="Employeer"
-
<!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
-
<select id=
"findEmployeerByNameandDep" resultType=
"Employeer">
-
select* from `t_employeer` where employeer_name=#{
0} and employeer_department=#{
1}
-
</select>
方法三:Map封装多参数
EmployeerMapper.java中添加
-
/**
-
* 多参数查询,注意要和Employeer.xml的方法名对应
-
*/
-
public List<Employeer> findEmployeerByNameandDep1(Map<String,String> map);
Employeer.xml中添加:
-
<!--多参数 查找 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的,注意key1和key2为传入的map的键值 -->
-
<select id="findEmployeerByNameandDep1" parameterType="map" resultType="Employeer">
-
select* from `t_employeer` where employeer_name=#{key1} and employeer_department=#{key2}
-
</select>
其中map是mybatis自己配置好的直接使用就行。map中key的名字是那个就在#{}使用那个。
测试使用:
-
/**
-
* 多参数查询列表,使用map
-
*/
-
public static List<Employeer> getEmployeerList(Map<String, String> map){
-
SqlSession session =
null;
-
List<Employeer> employeers=
null;
-
try {
-
session = sqlSessionFactory.openSession();
-
EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
-
employeers = employeerMapper.findEmployeerByNameandDep1(map);
-
session.commit() ;
-
}
finally {
-
session.close();
-
}
-
return employeers;
-
-
}
-
System.out.println(
"=========================使用多单参数map方式查询===========================");
-
Map<String, String> map =
new HashMap<String, String>();
-
map.put(
"key1",
"明明");
-
map.put(
"key2",
"财会部");
-
List<Employeer> employeers2=getEmployeerList(map);
-
for(Employeer employeer2:employeers2){
-
System.out.println(employeer2);
-
}
一定要注意key:
结果: