精华内容
下载资源
问答
  • Mybatis使用IN语句查询

    万次阅读 多人点赞 2018-03-23 16:45:03
    一、简介在SQL语法中如果我们想使用in的话直接可以像如下一样使用:select * from HealthCoupon where useType in ( '4' , '3' )但是如果在MyBatis中的使用in的话,像如下去做的话,肯定会报错: Map<String, ...

    一、简介

     

    在SQL语法中如果我们想使用in的话直接可以像如下一样使用:

    select * from HealthCoupon where useType in ( '4' , '3' )

    但是如果在MyBatis中的使用in的话,像如下去做的话,肯定会报错:

     

        Map<String, Object> selectByUserId(@Param("useType") String useType)
    	
        <select id="selectByUserId" resultMap="BaseResultMap" parameterType="java.lang.String">
    		select * from HealthCoupon where useType in (#{useType,jdbcType=VARCHAR})
        </select>

     

    其中useType="2,3";这样的写法,看似很简单,但是MyBatis不支持这样操作,可以用$进行替换,如下方式即可运行

     

        Map<String, Object> selectByUserId(@Param("useType") String useType)
    	
        <select id="selectByUserId" resultMap="BaseResultMap" parameterType="java.lang.String">
    		select * from HealthCoupon where useType in (${useType,jdbcType=VARCHAR})
        </select>

     

    #方式能够很大程度防止sql注入,$方式无法防止sql注入,所以还是推荐使用#方式,参考以下三种方式。

     

    MyBatis中提供了foreach语句实现IN查询,foreach语法如下:

     

    foreach语句中, collection属性的参数类型可以使:List、数组、map集合
    ​     collection: 必须跟mapper.java中@Param标签指定的元素名一样
    ​     item: 表示在迭代过程中每一个元素的别名,可以随便起名,但是必须跟元素中的#{}里面的名称一样。
       index:表示在迭代过程中每次迭代到的位置(下标)
       open:前缀, sql语句中集合都必须用小括号()括起来
    ​     close:后缀
       separator:分隔符,表示迭代时每个元素之间以什么分隔

    正确的写法有以下几种写法:

     

    (一)、selectByIdSet(List idList)

     

    如果参数的类型是List, 则在使用时,collection属性要必须指定为 list

     

    List<User> selectByIdSet(List idList);
    
    <select id="selectByIdSet" resultMap="BaseResultMap">
    	SELECT
    	<include refid="Base_Column_List" />
    	from t_user
    	WHERE id IN
    	<foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
    	  #{id}
    	</foreach>
    </select>


    (二)、List<User> selectByIdSet(String[] idList)

     

    如果参数的类型是Array,则在使用时,collection属性要必须指定为 array

    List<User> selectByIdSet(String[] idList);
    
    <select id="selectByIdSet" resultMap="BaseResultMap">
    	SELECT
    	<include refid="Base_Column_List" />
    	from t_user
    	WHERE id IN
    	<foreach collection="array" item="id" index="index" open="(" close=")" separator=",">
    	  #{id}
    	</foreach>
    </select>


    (三)、参数有多个时

     

    当查询的参数有多个时,有两种方式可以实现,一种是使用@Param("xxx")进行参数绑定,另一种可以通过Map来传参数。

     

    3.1 @Param("xxx")方式

    List<User> selectByIdSet(@Param("name")String name, @Param("ids")String[] idList);
    
    <select id="selectByIdSet" resultMap="BaseResultMap">
    	SELECT
    	<include refid="Base_Column_List" />
    	from t_user
    	WHERE  name=#{name,jdbcType=VARCHAR} and id IN
    	<foreach collection="ids" item="id" index="index"
    			 open="(" close=")" separator=",">
    	  #{id}
    	</foreach>
    </select>

     

    3.2 Map方式

    Map<String, Object> params = new HashMap<String, Object>(2);
    params.put("name", name);
    params.put("idList", ids);
    mapper.selectByIdSet(params);
    
    <select id="selectByIdSet" resultMap="BaseResultMap">  
         select  
         <include refid="Base_Column_List" />  
         from t_user where 
         name = #{name}
         and ID in  
         <foreach item="item" index="index" collection="idList" open="(" separator="," close=")">  
          #{item}  
         </foreach>  
    </select>
    展开全文
  • MyBatis使用Criteria

    千次阅读 2019-07-01 08:15:54
    MyBatis使用Criteria MyBatis使用Criteria能够不编写SQL语句,只是不断地拼接调用方法,就能创建新的SQL语句。 示例 效果如下: 该方法的作用是根据类型编号查找商品,能够获得一个商品列表 public List<Goods>...

    MyBatis使用Criteria

    MyBatis使用Criteria能够不编写SQL语句,只是不断地拼接调用方法,就能创建新的SQL语句。

    示例

    效果如下:

    该方法的作用是根据类型编号查找商品,能够获得一个商品列表

    public List<Goods> selectByTypeId(Integer typeId){
    	GoodsExample exmaple  = new GoodsExample();
    	Criteria criteria = exmaple.createCriteria().andTypesEqualTo(typeId);
    	
    	List<Goods> goodsList = goodsMapper.selectByExample(exmaple);
    	
    	return goodsList;
    }

    数据库如下:

    1561688184842

    查询结果如下:

    1561688192266

    自动生成

    在使用Ceriteria之前,需要做一些准备工作,如下:

    1. 在MyBatisGenerator中,配置可以生成Example

      添加eanblexxxxxx,并且配置为true

      <!--生成对应表及类名-->
      <table catalog="ssmstoredb" tableName="%" 
             enableCountByExample="true" 
             enableUpdateByExample="true"
             enableDeleteByExample="true" 
             enableSelectByExample="true"
             selectByExampleQueryId="true">
      </table>
    2. 执行MyBatisGenerator配置文件

      执行完后能够看到自动生成的文件,接下来看一下各个文件都有什么

    POJO

    生成了两个文件,一个是Goods实体类文件,另一个是GoodsExample文件,这里只详细说明后者。

    1561688466617

    生成的GoodsExample文件详解参考

    MyBatis的Mapper接口以及Example的实例函数及详解

    Mapper

    查看另一个文档!

    展开全文
  • MyBatis使用Map作为返回值

    万次阅读 2019-07-01 08:17:42
    MyBatis使用Map作为返回值 Map selectResultMap(Integer id); <!-- 需要再sql中给查询的列起别名称 as 的别名称,会封装入返回的map中 在使用中根据map的key获取value 前者是key,后者是value --&...

    MyBatis使用Map作为返回值

    	Map selectResultMap(Integer id);
    
    	
    <!-- 	需要再sql中给查询的列起别名称 as 的别名称,会封装入返回的map中 
    		在使用中根据map的key获取value
    	前者是key,后者是value -->
    	<select id="selectResultMap" resultType="java.util.Map" parameterType="int">
    		select m.id as id,m.username as `name`
    		from member m
    		where id = #{id}
    
    	</select>
    	MemberMapper memberMapper = sqlSession.getMapper(MemberMapper.class);
    
    	Map map = memberMapper.selectResultMap(1);
    	
    	System.out.println(map.get("id")+"\t"+map.get("name"));

    测试结果如下:

    1561456407004

    使用List/作为返回值

    	List<Map> selectResultMapGraterTDate(String date);
    
    	<select id="selectResultMapGraterTDate" resultType="java.util.Map" parameterType="String">
    		select m.id as id,m.username as `name`
    		from member m
    		where logindate &gt; #{logindate}
    	</select>
    

    测试:

    	String loginDate = "2019-06-07";
    	List<Map> maps = memberMapper.selectResultMapGraterTDate(loginDate);
    	
    	for (Map map : maps) {
    		System.out.println(map.get("id")+"\t"+map.get("name"));
    	}	

    测试结果如下:
    在这里插入图片描述

    展开全文
  • MyBatis 使用Map接口传递参数

    千次阅读 2018-08-22 16:28:12
    示例【MyBatis 使用Map接口传递参数】 创建UserMapper.xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//...

    示例【MyBatis 使用Map接口传递参数】

    创建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.mapper.UserMapper">	
    	<!-- 根据用户名、密码查询用户 -->
    	<select id="getUser" parameterType="map" resultType="com.po.User">
    		select * from t_user where username=#{username} and password=#{password}
    	</select>
    </mapper>

    创建UserDao

    package com.dao;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.apache.ibatis.session.SqlSession;
    import com.factory.SessionFactory;
    import com.po.User;
    public class UserDao {
    	private SqlSession session=SessionFactory.getSqlSession();
    	private User user;
    	private List<User> users;	
    	public SqlSession getSession() {
    		return session;
    	}
    	
    	//根据用户名、密码查询用户
    	public User getUser(String username,String password) {
    		Map<String, Object> parameterMap=new HashMap<String, Object>();
    		parameterMap.put("username", username);
    		parameterMap.put("password", password);
    		user=session.selectOne("com.mapper.UserMapper.getUser", parameterMap);
    		return user;
    	}
    }
    

    创建Test

    package com.test;
    import com.dao.UserDao;
    import com.po.User;
    public class Test {
    	public static void main(String[] args) {
    		UserDao userDao=new UserDao();
    		User user=userDao.getUser("admin", "123");
    		System.out.println(user);
    	}
    }
    

    运行main方法,控制台输出:

    展开全文
  • mybatis 使用merge into

    万次阅读 2018-07-16 16:57:44
    mybatis 使用merge into,跟一般的update写法相同: &lt;update id="mergeinfo"&gt; merge into user_type a using ( select #{name} as name, #{type} as type from dual ) b on (a.type ...
  • Mybatis使用insert插入数据

    千次阅读 2016-05-07 09:00:30
    mybatis使用insert方法插入mysql数据库,正常执行,在数据库中却没有显示
  • Mybatis 使用动态语句实现批量删除(delete结合foreach)
  • SpringBoot集成mybatis使用HikariCP自定义多数据源 之前分享了SpringBoot集成mybatis使用durid自定义多数据源配置,因为spring boot的版本是1.5.9,所以采用了durid连接池进行配置,后来由于项目升级为2.+,而spring...
  • mybatis使用foreach语句实现IN查询

    万次阅读 2017-05-31 20:28:45
    mybatis使用foreach语句实现IN查询先看一个实例mapper.java: List<User> selectByIdSet(@Param("idList")List<Integer> idList);mapper.xml SELECT <include refid=
  • MyBatis使用步骤及原理

    万次阅读 2018-05-04 17:25:47
    主要讲解MyBatis-基本使用步骤 回顾: MyBatis是一个数据持久层(ORM)框架。把实体 类和SQL语句之间建立了映射关系,是一种半自 动化的ORM实现。MyBATIS需要开发人员自己来写sql语句,这可以增加了程序的灵活性,...
  • mybatis使用注解方式的删除更新操作

    千次阅读 2017-10-10 18:15:24
    mybatis使用注解方式的删除更新操作mybatis本身提供的注解删除 @Delete("delete from user where userName = #{userName}") public int delete ( String userName ); 这个没有什么特殊的操作,理解了Insert操作...
  • tkmybatis使用教程

    千次阅读 2019-04-23 15:35:22
    mybatis-generator:generate
  • mybatis使用map传值

    千次阅读 2018-12-25 11:08:34
    在没有mybatis中,参数传递使用map,首先是,parameterType设置为map类型。取值的话和对象传值是一样的,使用${key} 或者#{key}都可以,不过${}取值不安全,可能会有SQL注入的风险,所以一般建议使用#{}取值。判断...
  • 关于 mybatis 使用 小于号 > 大于号出错 使用转义字符
  • Mybatis 使用count

    千次阅读 2017-10-03 18:33:12
    java方法,这里得注意方法的返回值 List,Object>> findGroup(Integer user_id); 第一步编写resultMap <result column="assrotment" property="assortment"></result>
  • MyBatis使用视图

    千次阅读 2017-06-12 16:50:23
    1首先创建视图 create view stu_class (sname,banjihao,banjidesc) as  select s.sname ,c.banjihao ,c.banjidesc from t_student s inner join t_class c on s.classid=c....2在Mybatis的配置文件中直接调用视图
  • Mybatis使用concat函数

    千次阅读 2019-06-29 13:59:44
    开发时遇到一个需求,用户角色存在变更,使用关联关系浪费空间,于是想到使用在数据库字段中存放字符串,以,分割,这样获取到数据之后使用AuthorityUtils.commaSeparatedStringToAuthorityList(param)即可将用户...
  • mybatis使用oracle关键字

    千次阅读 2017-05-17 11:59:09
    **mybatis中如果使用的字段是oracle的关键字,会出现错误 解决方式是 可以使用resultMap**<!-- 预约日历用 --> <id property="id" colum
  • //指定mybatis全局配置文件 String resource = "mybatis-config.xml"; //读取全局配置文件 InputStream inputStream = Resources.getResourceAsStream(resource); //构建SqlSessionFactory对象 SqlSessionFactory ...
  • MyBatis使用@Select注解

    千次阅读 2019-06-21 14:49:44
    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"> <configura...
  • 最近在使用Mybatis来传参的时候,遇到了一个异常,是什么呢? 是org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'name' not found. ...
  • Mybatis 使用distinct问题

    万次阅读 2019-05-31 14:46:53
    使用插件自动生成sql,具体如下 <resultMap id="versioncodeResult" type="java.lang.String" > <result column="code" property="code" jdbcType="VARCHAR" /> </resultMap> <select id=...
  • mybatis使用truncate清空表

    千次阅读 2019-12-13 11:25:31
    一、Mapper接口 void truncateTable(); 二、XML文件 <update id="truncateTable" > TRUNCATE TABLE 表名 </update> 注意: 是<update>标签,不是<delete>标签 ...
  • mybatis使用数组批量删除

    千次阅读 2016-10-24 12:52:00
    最近在使用mybatis做项目中,遇到了很多问题比如说: mybatis关联查询 mybatis批量删除。 今天就来说一说mybatis批量删除。 正文 使用数组进行批量删除 mapper.java int deletePhotoByArray(String[] ...
  • org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'ido' not found. Available parameters are [0, 1, param1, param2]
  • mybatis使用mysql的IF函数报错

    千次阅读 2019-01-27 00:41:28
    如上图所示的使用方法,在mysql中执行是没有问题的,但是到了mybatis中就会抛出以下异常至今未在百度和google上找到合理的解释或者异常发生原因,初步估计是mybatis对IF函数的兼容度不够或者是不支持在IF函数中使用=...
  • 使用接口和不使用接口差别不大,先介绍第一种不使用接口。第一步:在创建完成Web工程之后,第一步依旧是导包。第二步:创建一个简单的实例对象。我们在这里调用一下toString方法,便于我们在控制台输出。第三步:...
  • Mybatis使用collection导致分页总数过多

    千次阅读 2019-05-25 14:46:45
    mybatis使用collection标签进行自动封装对象时,分页总数查询是比结果多的,因为记录折叠是发生在Java代码,由mybatis实现,所以如果使用了分页插件,分页总数就会比实际多,解决办法是使用子查询,不要连表,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 782,287
精华内容 312,914
关键字:

mybatis使用