Mybatis代理接口
来源:互联网 发布:js 短路求值 编辑:程序博客网 时间:2024/06/06 03:53
理清mybatis中的#和$之间的区别:
#{}表示一个预处理对象,参数类型不定,是根据传入的参数类型来设定的。类似于JDBC中的占位符(?)。特例使用,模糊查询:(针对oracle):and username like concat(concat('%',#{username}),'%')concat函数用于将两个字符串连接起来,形成一个单一的字符串。采取$的方式传入参数,所有采取$的方式传入的参数都只是字符串(无论传入的是什么,都会当成字符串处理),潜在的危险就是SQL注入的问题。and username like concat(concat('%',${value或字段名}),'%') #相当于是JDBC里的占位符(?),传进去的值可以设置其数据类型。会根据传入的数据类型自动加字符串的单引号或者不加单引号。预处理参数。可以防止SQL注入。 $相当于是我们的JDBC里的字符串拼接。这里就相当于传入的就是一个字符串(不管传入什么样的数据类型,都是字符串)
动态SQL
使用动态SQL的目的,就是在SQL语句中加入对于数据的判断。根据传入的数据来形成SQL语句。
动态SQL语句的示例:
插入部分数据,获取主键值或ID(动态SQL):
要获取刚刚插入的主键列。一般都是针对数据库自增的列(包括通过oracle的序列自增的)。需要在插入的时候设定属性:
<insert id="insertItem" parameterType="Company" keyColumn="COMPANYID" keyProperty="companyid" useGeneratedKeys="true"> <!-- 动态SQL语句 --> <!-- prefix在内容前加上前缀,suffix在内容后加上后缀,prefixOberrides把首部的某些内容覆盖,suffixOverrides把尾部的某些内容覆盖 --> <trim prefix="insert into company(companyid," suffixOverrides=","> <if test="companyname!=null and companyname!=''"> companyname, </if> <if test="address!=null and address!=''"> address, </if> </trim> <trim prefix=") values(companyask.nextval," suffixOverrides="," suffix=")"> <if test="companyname!=null and companyname!=''"> #{companyname}, </if> <if test="address!=null and address!=''"> #{address}, </if> </trim> </insert>
由于mybatis给我们提供了数据的增删改查的接口,把mybatis给我们提供的接口同我们自定义的方法进行整合。
代理模式开发Mapper接口开发,所有的mybatis的开发都是采取的是mapper接口代理。
首先定义一个通用的dao层操作接口:
public interface IDaoHotel<T> { int insertItem(T t); T getmodel(Object id); int updateItem(T t); int deleteItem(Object id); List<T> getlist(T t);}
开发实现对于某张表的增删改查的实现接口(Mapper接口):
public interface UserInfoMapper extends IDaoHotel<UserInfo> {}
配置SQL文件,注意namespace,这个namespace必须是同实现的接口的限定名一致:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace表示这个配置文件代理的是哪个接口 --><mapper namespace="com.jinglin.hotelsup.dao.imp.UserInfoMapper"> <insert id="insertItem" keyColumn="userid" keyProperty="userid" useGeneratedKeys="true" parameterType="UserInfo"> insert into userinfo(userid,username,userpwd,card,job) values(userseq.nextval,#{username},#{userpwd},#{card},#{job}) </insert></mapper>
编写测试这个mapper代理接口是否成功?
@Test public void testit(){ SqlSession sqlSession = sessionFactory.openSession(); //代理的接口 UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper.class); UserInfo userinfo = new UserInfo(); userinfo.setCard("222"); userinfo.setJob("softer1"); userinfo.setUsername("zhangsan51"); userinfo.setUserpwd("678"); int result= userInfoMapper.insertItem(userinfo); sqlSession.commit(); sqlSession.close(); System.out.println("受影响的行数:"+result); System.out.println("刚刚插入的主键:"+userinfo.getUserid()); }
阅读全文
0 0
- Mybatis代理接口
- [mybatis]Mapper接口代理开发
- mybatis mapper接口代理开发
- MyBatis的Mapper接口动态代理
- 动态代理在mybatis接口式编程中的应用
- mybatis中接口没有实现类的动态代理探究
- mybatis中接口没有实现类的动态代理探究
- Mybatis总结2使用动态代理 实现接口
- Mybatis基于接口代理的方式来开发Dao(一)
- Mybatis基于接口代理的方式来开发Dao(二)
- MyBatis学习(四):MyBatis使用代理方法(接口)实现数据库的操作
- 代理接口
- 接口代理
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
- Mybatis Mapper动态代理方法 即 只写Dao接口 不谢Dao的实现类
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring - 大新博客
- 转 MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
- python之list,tuble,dict和set
- npm更新至最新版本
- linux-基础命令
- rsync+inotify
- Qt中进度条的简单实例
- Mybatis代理接口
- listview与adapter用法(扫盲贴)
- 树结构(一)
- 当无人机有了“集群智能”
- Ubuntu下配置VScode的C++编程环境
- TCP/IP 协议:三次握手与四次挥手
- POJ3233-Matrix Power Series
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- HDU 6024 Building Shops(DP)