mapper.xml怎么写5大于4大于号怎么写

深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete - 推酷
深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete
本篇文章将简单介绍&insert, update, delete 的配置及使用 ,以后会对mybatis的源码进行深入讲解。
相信,看到insert, update, delete, 我们就知道其作用了,顾名思义嘛,myabtis 作为持久层框架,必须要对CRUD啊。
好啦,咱们就先来看看&insert, update, delete 怎么配置, 能配置哪些元素吧:
&?xml version=&1.0& encoding=&UTF-8& ?&
&!DOCTYPE mapper
PUBLIC &-//ibatis.apache.org//DTD Mapper 3.0//EN&
&http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd&&
&!-- mapper 为根元素节点, 一个namespace对应一个dao --&
&mapper namespace=&com.dy.dao.UserDao&&
&!-- 1. id (必须配置)
id是命名空间中的唯一标识符,可被用来代表这条语句。
一个命名空间(namespace) 对应一个dao接口,
这个id也应该对应dao里面的某个方法(相当于方法的实现),因此id 应该与方法名一致 --&
id=&insertUser&
&!-- 2. parameterType (可选配置, 默认为mybatis自动选择处理)
将要传入语句的参数的完全限定类名或别名, 如果不配置,mybatis会通过ParameterHandler 根据参数类型默认选择合适的typeHandler进行处理
parameterType 主要指定参数类型,可以是int, short, long, string等类型,也可以是复杂类型(如对象) --&
parameterType=&com.demo.User&
&!-- 3. flushCache (可选配置,默认配置为true)
将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:true(对应插入、更新和删除语句) --&
flushCache=&true&
&!-- 4. statementType (可选配置,默认配置为PREPARED)
STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。 --&
statementType=&PREPARED&
&!-- 5. keyProperty (可选配置, 默认为unset)
(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 --&
keyProperty=&&
&!-- 6. keyColumn
(可选配置)
(仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像 PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 --&
keyColumn=&&
&!-- 7. useGeneratedKeys (可选配置, 默认为false)
(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。
useGeneratedKeys=&false&
&!-- 8. timeout
(可选配置, 默认为unset, 依赖驱动)
这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset(依赖驱动)。 --&
timeout=&20&&
id=&updateUser&
parameterType=&com.demo.User&
flushCache=&true&
statementType=&PREPARED&
timeout=&20&&
id=&deleteUser&
parameterType=&com.demo.User&
flushCache=&true&
statementType=&PREPARED&
timeout=&20&&
以上就是一个模板配置, 哪些是必要配置,哪些是根据自己实际需求,看一眼就知道了。
下面, 还是用第一篇文章《
》里面的demo来示例吧:
数据库 (user表):
我项目结构:
User.java:
package com.dy.
public class User {
private int
private int
private int deleteF
public int getId() {
public void setId(int id) {
public String getName() {
public void setName(String name) {
this.name =
public String getPassword() {
public void setPassword(String password) {
this.password =
public int getAge() {
public void setAge(int age) {
this.age =
public int getDeleteFlag() {
return deleteF
public void setDeleteFlag(int deleteFlag) {
this.deleteFlag = deleteF
UserDao.java:
package com.dy.
import com.dy.entity.U
public interface UserDao {
public void insertUser (User user);
public void updateUser (User user);
public void deleteUser (User user);
userDao.xml:
&?xml version=&1.0& encoding=&UTF-8& ?&
&!DOCTYPE mapper
PUBLIC &-//ibatis.apache.org//DTD Mapper 3.0//EN&
&http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd&&
&mapper namespace=&com.dy.dao.UserDao&&
&!-- 对应userDao中的insertUser方法,
&insert id=&insertUser& parameterType=&com.dy.entity.User&&
insert into user(id, name, password, age, deleteFlag)
values(#{id}, #{name}, #{password}, #{age}, #{deleteFlag})
&!-- 对应userDao中的updateUser方法 --&
&update id=&updateUser& parameterType=&com.dy.entity.User&&
update user set name = #{name}, password = #{password}, age = #{age}, deleteFlag = #{deleteFlag}
where id = #{id};
&!-- 对应userDao中的deleteUser 方法 --&
&delete id=&deleteUser& parameterType=&com.dy.entity.User&&
delete from user where id = #{id};
这样,一个简单的映射关系就建立了。 仔细观察上面parameterType, &&com.dy.entity.User&,包名要是再长点呢,每次都这样写,写得蛋疼了。别忘了之前讲的&typeAliases(别名), 那么这个地方,用上别名,岂不是技能跟蛋疼的长长的包名说拜拜了。 好啦,咱们配上别名,在哪儿配? 当然是在mybatis 的全局配置文件(我这儿名字是mybatis-conf.xml), 不要认为是在mapper的配置文件里面配置哈。
mybatis-conf.xml:
&typeAliases&
通过package, 可以直接指定package的名字, mybatis会自动扫描你指定包下面的javabean,
并且默认设置一个别名,默认的名字为: javabean 的首字母小写的非限定类名来作为它的别名。
也可在javabean 加上注解@Alias 来自定义别名, 例如: @Alias(user)
&package name=&com.dy.entity&/&
&typeAlias alias=&user& type=&com.dy.entity.User&/&
&/typeAliases&
这样,一个别名就取好了,咱们可以把上面的&com.dy.entity.User 都直接改为user 了。 这多方便呀!
我这儿数据库用的是mysql, 我把user表的主键id 设置了自动增长, 以上代码运行正常, 那么问题来了(当然,我不是要问学挖掘机哪家强),我要是换成oracle数据库怎么办? oracle 可是不支持id自增长啊? 怎么办? 请看下面:
&!-- 对应userDao中的insertUser方法,
&insert id=&insertUser& parameterType=&com.dy.entity.User&&
&!-- oracle等不支持id自增长的,可根据其id生成策略,先获取id
&selectKey resultType=&int& order=&BEFORE& keyProperty=&id&&
select seq_user_id.nextval as id from dual
&/selectKey&
insert into user(id, name, password, age, deleteFlag)
values(#{id}, #{name}, #{password}, #{age}, #{deleteFlag})
同理, 如果我们在使用mysql的时候,想在数据插入后返回插入的id, 我们也可以使用 selectKey 这个元素 :
&!-- 对应userDao中的insertUser方法,
&insert id=&insertUser& parameterType=&com.dy.entity.User&&
&!-- oracle等不支持id自增长的,可根据其id生成策略,先获取id
&selectKey resultType=&int& order=&BEFORE& keyProperty=&id&&
select seq_user_id.nextval as id from dual
&/selectKey&
&!-- mysql插入数据后,获取id --&
&selectKey keyProperty=&id& resultType=&int& order=&AFTER& &
SELECT LAST_INSERT_ID() as id
&/selectKey&
insert into user(id, name, password, age, deleteFlag)
values(#{id}, #{name}, #{password}, #{age}, #{deleteFlag})
这儿,我们就简单提一下 &selectKey& 这个元素节点吧:
&selectKey
&!-- selectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 --&
keyProperty=&id&
&!-- 结果的类型。MyBatis 通常可以推算出来,但是为了更加确定写上也不会有什么问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的 Object 或一个 Map。 --&
resultType=&int&
&!-- 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素 - 这和像 Oracle 的数据库相似,在插入语句内部可能有嵌入索引调用。 --&
order=&BEFORE&
&!-- 与前面相同,MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型。 --&
statementType=&PREPARED&&
好啦,本篇文章主要介绍了insert, update, delete的配置及用法。 下篇文章将介绍复杂的 select相关的配置及用法, 待这些都讲完后,会先根据源码分析一下mybatis的整个运行流程,然后再深入mybatis的用法。
本篇文章到此结束!
附上demo 下载地址 :/s/1gdtKf5L
需要的可以下载。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致mybatis-spring如何做到接口编程的 - 推酷
mybatis-spring如何做到接口编程的
What is MyBatis-Spring Not Spring-Mybatis?官方介绍
第二版那样,Spring 3.0 也仅支持 iBatis2。那么,我们就想将 MyBatis3 的支持添加 到 Spring3.0(参考 Spring Jira 中的问题)中。而不幸的是,Spring 3.0 的开发在 MyBatis 3.0 官方发布前就结束了。 因为 Spring 开发团队不想发布一个基于非发布版的 MyBatis 的整合支 持,那么 Spring 官方的支持就不得不继续等待了。要在 Spring 中支持 MyBatis,MyBatis 社 区认为现在应该是自己团结贡献者和有兴趣的人一起来开始将 Spring 的整合作为 MyBatis 社 区的子项目的时候了
一.spring 的配置
注入映射器有两种方法
1.每个都搞一个,这个比较坑,可以选择忽略
2.配置路径然后全局扫描
上面那个虽然不容,但是可以告诉我们他是如何做的
我们来看MapperScannerConfiguer,主要就是doScan
这个里面其实还是用了MapperFactoryBean
他把每个接口,用 MapperFactoryBean 生成代理之后注册到spring
而MapperFactoryBean 是如何做的呢
MapperFactoryBean.getObject()----&SqlSessionTemplate.getMapper()---&Configuration .getMapper()
-----MapperRegistry.getMapper()-----&MapperProxyFactory.newInstance()
经过了几层之后总算到了代理实现类 返回了我们的接口代理类MapperProxy计算注册完成了
执行肯定是从MapperProxy.invoke方法开始.
然后mybatis根据xml配置文件或者方法的注解,的类型,这类涉及一个十分重要的类MapperMethod
这里mybatis就根据不同的返回类型,已经配置的不同类型,执行SqlSessionTemplate不同的方法
SqlSessionTemplate 再最后调用下执行方法然后就ok了,但是这里SqlSessionInterceptor拦截这个请求,然后统一处理了下
就这样,我们的接口编程就完成
这个原理倒是很简单,只不过,当初自己只是从mybatis-spring入手,看了需求没有发现如何实现,后来断点才观察到了整个过程,
希望给大家理解下吧
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致myBatis mapper 返回任意类型_百度知道mybaits的xxMapper.xml文件中大于号和小于号处理
第一种方法:
因为这个是xml格式的,所以不允许出现类似&&&这样的字符,但是都可以使用&![CDATA[ ]]&符号进行说明,将此类符号不进行解析 。 mapper文件示例代码:
&select id=&selectMonthAdvertise& resultMap=&ResultMap&&
select * from ad_n_advertise_t where user_id in
&foreach item=&item& index=&index& collection=&userIdList& open=&(& separator=&,& close=&)&&
&/foreach&
and isdelete=#{isdelete,jdbcType=TINYINT}
and &![CDATA[&/span&date_sub(curdate(), INTERVAL 30 DAY) &= date(crt_time)]]&
order by crt_time desc
第二种方法: 用了转义字符把&和&替换掉。 mapper文件示例代码:
&select id=&selectMonthAdvertise& resultMap=&ResultMap&&
select * from ad_n_advertise_t where user_id in
&foreach item=&item& index=&index& collection=&userIdList& open=&(& separator=&,& close=&)&&
&/foreach&
and isdelete=#{isdelete,jdbcType=TINYINT}
and date_sub(curdate(), INTERVAL 30 DAY) &lt= date(crt_time)
order by crt_time desc
附:转义字符表。
mapper文件示例代码:
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'【mybatis大于等于】-我搜你-为您提供最新最优mybatis大于等于信息
mybatis大于等于的所有信息
&& &等于号直接写,大于号、小于号要转义,分别用&和& 也可以包含在CDATA标签里回答(1) && & 回答(1) && & 。。。。。。 回答(1) && &有啊,类似于这种:回答(1) && &1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的...回答(4) && &看你的异常 就知道是 字符转换数字出错了 指名 undefined 无法转换为int 类型 undefined 是一个特殊值,通常用于指示变量尚未赋值。对未定义值的引用返回...回答(6) && &你用的什么,mybatis是 select * from UserInfo Use_usercode_fk=#{userCode,jdbcType=VARCHAR} 回答(2) && &String sql="sql内容"; int[] i=statement.executeBatch(sql); //试试看我也不是很懂 将一批命令提交给数据库来执行,如果全部命令执行成功,则返回...回答(4)

我要回帖

更多关于 大于号是怎么写 的文章

 

随机推荐