- 浏览: 56866 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
chiqinghaichi:
楼主好!菜鸟一枚,试了下你的程序,当访问 http://loc ...
SpringMVC -
随意而生:
复习复习 不错
SpringMVC -
ccii:
cylboke 写道他的意思是“orcle”写错了吧?我猜的! ...
Oracle基本操作 -
happy200318:
给个赞,不错
SpringMVC -
cylboke:
他的意思是“orcle”写错了吧?我猜的!!!
Oracle基本操作
一、MyBatis简介
1. MyBatis概念
MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。它支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
2. MyBatis和Hibernate比较
1)hibernate是全自动,而mybatis是半自动。hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理。
2)hibernate数据库移植性远大于mybatis。hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、mysql等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高。
3)hibernate拥有完整的日志系统,mybatis则欠缺一些。hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多。
4)mybatis相比hibernate需要关心很多细节。hibernate配置要比mybatis复杂的多,学习成本也比mybatis高。但也正因为mybatis使用简单,才导致它要比hibernate关心很多技术细节。mybatis由于不用考虑很多细节,开发模式上与传统jdbc区别很小,因此很容易上手并开发项目,但忽略细节会导致项目前期bug较多,因而开发出相对稳定的软件很慢,而开发出软件却很快。hibernate则正好与之相反。但是如果使用hibernate很熟练的话,实际上开发效率丝毫不差于甚至超越mybatis。
5)sql直接优化上,mybatis要比hibernate方便很多。由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大,见到报表等变态需求时,hql也歇菜,也就是说hql是有局限的;hibernate虽然也支持原生sql,但开发模式上却与orm不同,需要转换思维,因此使用上不是非常方便。总之写sql的灵活度上hibernate不及mybatis。
6)Hibernate有更好的二级缓存机制,可以使用第三方缓存。而MyBatis的二级缓存机制不佳。
二、MyBatis简单示例
1. 导包
新建一个Java项目,将 mybatis-3.1.1.jar 和 mysql-connector-java-5.1.6.jar 导入即可。
2. src/Configuration.xml配置文件
Configuration.xml是mybatis用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有java类所对应的别名,比如<typeAlias alias="User" type="com.jiang.mybatis.model.User"/>这个别名非常重要,你在具体的类的映射中,比如User.xml 中resultType就是对应这里的。要保持一致,当然这里的resultType还有另外单独的定义方式,后面再说。里面的<mapper resource="com/jiang/mybatis/model/User.xml"/>是包含要映射的类的xml配置文件。
3. User.java实体
4. User.xml映射文件
5. 测试
三、基于命名空间的接口方式编程
基于接口方式的编程有很多优点,首先它不是基于文字的,那就更安全了。第二,如果你的 IDE 有代码补全功能,那么你可以利用它来操纵已映射的 SQL 语句。第三,不需要强制类型转换,同时 IUserMapper接口可以保持简洁,返回值类型很安全(参数类型也很安全) 。
1. 新建接口类IUserOperation.java
2. 修改User.xml映射文件
<mapper namespace="com.jiang.mybatis.inter.IUserOperation">
3. 测试
四、MyBatis实现增删改查
1. 命名空间接口IUserOperation.java
2. 映射文件User.xml
3. 测试
五、MyBatis的关联查询
1. 增加实体Article.java
2. 命名空间接口IUserOperation.java
public List<Article> getArticlesByUser(int id);
3. 映射文件User.xml
4. 测试
六、MyBatis的动态SQL
1. if标签
<if test="userName != null">
and user_name= #{userName}
</if>
如果userName不为null则加上if中的筛选条件
2. choose标签
<choose>
<when test="userAge != null">
and user_age = #{userAge}
</when>
<when test="userAddress != null">
and user_address= #{userAddress}
</when>
<otherwise>
and user_name = "userName"
</otherwise>
</choose>
choose标签跟switch效果一样,如果userAge不为null就增加该条件,然后退出。如果所有的when都为null,则执行otherwise中的筛选条件。
3. where标签
select * from t_blog
<where>
<if test="title != null">
title = #{title}
</if>
<if test="content != null">
and content = #{content}
</if>
</where>
where标签可以智能的处理SQL,如果标签里面的内容不全为null的话,它会自动在SQL里加入一个where语句,并且可以去掉条件中多余的AND或OR。
4. set标签
update t_blog
<set>
<if test="title != null">
title = #{title},
</if>
<if test="content != null">
content = #{content},
</if>
<if test="owner != null">
owner = #{owner}
</if>
</set>
set标签主要用于update语句,对SQL的处理和where标签一样。
5. trim标签
select * from t_blog
<trim prefix="where" prefixOverrides="and | or">
<if test="title != null">
title = #{title}
</if>
<if test="content != null">
and content = #{content}
</if>
<if test="owner != null">
or owner = #{owner}
</if>
</trim>
trim标签的作用和上面的where和set相似,如果里面条件不全为null,则加上prefix条件,并能自动去掉前面多余的and或or。
前缀prefix和后缀suffix分别对应的属性是prefixOverrides和suffixOverrides。
6. foreach标签
select * from t_news n where
<foreach collection="listTag" index="index" item="tag" open="(" separator="," close=")">
#{tag} in n.tags
</foreach>
select * from xxx where mid in
<foreach collection="mids" item="mid" open="(" separator="," close=")">
#{mid}
</foreach>
foreach标签的作用是循环的把collection指定的参数里的每个元素加入一个分支语句连接起来。标签的属性主要有 item,index,collection,open,separator,close。
collection应该是传入参数中的一个list或者数组或者map
item表示集合中每一个元素进行迭代时的别名
index指定每次迭代到的位置
open表示该语句以什么开始
separator表示在每次进行迭代之间以什么符号作为分隔符
close表示以什么结束
上面的标签转换为SQL为:
select * from xxx where mid in ( ? , ? ...)
7. selectKey标签
在使用ibatis插入数据进数据库的时候,会用到一些sequence的数据,有些情况下,在插入完成之后还需要将sequence的值返回,然后才能进行下一步的操作。 使用ibatis的selectKey就可以得到sequence的值,同时也会将值返回。不过对于不同的数据库有不同的操作方式。对于oracle:
<insert id="insertUser" parameterClass="ibatis.User">
<selectKey resultClass="long" keyProperty="id">
select SEQ_USER_ID.nextval as id from dual
</selectKey>
insert into user(id,name,password) values(#id#,#name#,#password#)
</insert>
该句话执行完之后,传进来的参数User对象里的id字段就会被赋值成sequence的值。
对于mysql
<insert id="insertUser" parameterClass="ibatis.User">
insert into user(name,password) values(#name#,#password#)
<selectKey resultClass="long" keyProperty="id">
SELECT LAST_INSERT_ID() AS ID
</selectKey>
</insert>
将selectKey放在insert之后,通过LAST_INSERT_ID()获得刚插入的自动增长的id的值。
代码全部在上面了啊,你想要jar包?
jar包很难找的
上一篇博客中有源工程下载地址,包括jar包《Spring整合Mybatis》
代码全部在上面了啊,你想要jar包?
jar包很难找的
代码全部在上面了啊,你想要jar包?
1. MyBatis概念
MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。它支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
2. MyBatis和Hibernate比较
1)hibernate是全自动,而mybatis是半自动。hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理。
2)hibernate数据库移植性远大于mybatis。hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、mysql等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高。
3)hibernate拥有完整的日志系统,mybatis则欠缺一些。hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多。
4)mybatis相比hibernate需要关心很多细节。hibernate配置要比mybatis复杂的多,学习成本也比mybatis高。但也正因为mybatis使用简单,才导致它要比hibernate关心很多技术细节。mybatis由于不用考虑很多细节,开发模式上与传统jdbc区别很小,因此很容易上手并开发项目,但忽略细节会导致项目前期bug较多,因而开发出相对稳定的软件很慢,而开发出软件却很快。hibernate则正好与之相反。但是如果使用hibernate很熟练的话,实际上开发效率丝毫不差于甚至超越mybatis。
5)sql直接优化上,mybatis要比hibernate方便很多。由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大,见到报表等变态需求时,hql也歇菜,也就是说hql是有局限的;hibernate虽然也支持原生sql,但开发模式上却与orm不同,需要转换思维,因此使用上不是非常方便。总之写sql的灵活度上hibernate不及mybatis。
6)Hibernate有更好的二级缓存机制,可以使用第三方缓存。而MyBatis的二级缓存机制不佳。
二、MyBatis简单示例
1. 导包
新建一个Java项目,将 mybatis-3.1.1.jar 和 mysql-connector-java-5.1.6.jar 导入即可。
2. src/Configuration.xml配置文件
Configuration.xml是mybatis用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有java类所对应的别名,比如<typeAlias alias="User" type="com.jiang.mybatis.model.User"/>这个别名非常重要,你在具体的类的映射中,比如User.xml 中resultType就是对应这里的。要保持一致,当然这里的resultType还有另外单独的定义方式,后面再说。里面的<mapper resource="com/jiang/mybatis/model/User.xml"/>是包含要映射的类的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"> <configuration> <typeAliases> <typeAlias alias="User" type="com.jiang.mybatis.model.User"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" /> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/jiang/mybatis/model/User.xml"/> </mappers> </configuration>
3. User.java实体
package com.jiang.mybatis.model; public class User { private int id; private String userName; private String userAge; private String userAddress; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserAge() { return userAge; } public void setUserAge(String userAge) { this.userAge = userAge; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; } }
4. User.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.jiang.mybatis.models.UserMapper"> <!-- 注意:此处resultType的User为Configuration里的别名。 实体的属性和数据库中的字段名相同时会自动匹配,如果不同则需要配置一个自己的resultMap然后指定一个返回类型为resultMap的自定义Map --> <select id="selectUserByID" parameterType="int" resultType="User"> select * from user where id = #{id} </select> </mapper>
5. 测试
package test; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.jiang.mybatis.model.User; public class Test { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("Configuration.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSessionFactory getSession() { return sqlSessionFactory; } public static void main(String[] args) { SqlSession session = sqlSessionFactory.openSession(); try { User user = (User) session.selectOne( "com.jiang.mybatis.models.UserMapper.selectUserByID", 1); System.out.println(user.getUserAddress()); System.out.println(user.getUserName()); } finally { session.close(); } } }
三、基于命名空间的接口方式编程
基于接口方式的编程有很多优点,首先它不是基于文字的,那就更安全了。第二,如果你的 IDE 有代码补全功能,那么你可以利用它来操纵已映射的 SQL 语句。第三,不需要强制类型转换,同时 IUserMapper接口可以保持简洁,返回值类型很安全(参数类型也很安全) 。
1. 新建接口类IUserOperation.java
package com.jiang.mybatis.inter; import com.jiang.mybatis.model.User; public interface IUserOperation { //这里的方法名必须和映射文件里的select的id相同 public User selectUserByID(int id); }
2. 修改User.xml映射文件
<mapper namespace="com.jiang.mybatis.inter.IUserOperation">
3. 测试
... public static void main(String[] args) { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session.getMapper(IUserOperation.class); User user = userOperation.selectUserByID(1); System.out.println(user.getUserAddress()); System.out.println(user.getUserName()); } finally { session.close(); } } ...
四、MyBatis实现增删改查
1. 命名空间接口IUserOperation.java
package com.jiang.mybatis.inter; import java.util.List; import com.jiang.mybatis.model.User; public interface IUserOperation { //这里的方法名必须和映射文件里的select的id相同 public User selectUserByID(int id); public List<User> selectUsers(String userName); public void addUser(User user); public void updateUser(User user); public void deleteUser(int id); }
2. 映射文件User.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.jiang.mybatis.inter.IUserOperation"> <resultMap type="User" id="resultListUser"> <id column="id" property="id" /> <result column="user_name" property="userName" /> <result column="user_age" property="userAge" /> <result column="user_address" property="userAddress" /> </resultMap> <select id="selectUserByID" parameterType="int" resultMap="resultListUser"> select * from user where id = #{id} </select> <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 --> <select id="selectUsers" parameterType="string" resultMap="resultListUser"> select * from user where user_name like #{userName} </select> <!--id和parameterType分别与IUserOperation接口中的addUser方法的名字和参数类型一致; 以#{name}的形式引用User参数的属性,MyBatis将使用反射读取Student参数的此属性,#{name}中name大小写敏感; seGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键; keyProperty="id"指定把获取到的主键值注入到User的id属性--> <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user(user_name,user_age,user_address) values (#{userName},#{userAge},#{userAddress}) </insert> <update id="updateUser" parameterType="User" > update user set user_name=#{userName},user_age=#{userAge},user_address=#{userAddress} where id=#{id} </update> <delete id="deleteUser" parameterType="int"> delete from user where id=#{id} </delete> </mapper>
3. 测试
package test; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.jiang.mybatis.inter.IUserOperation; import com.jiang.mybatis.model.User; public class Test { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("Configuration.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Test test = new Test(); test.selectUserByID(); test.selectUsers(); test.addUser(); test.updateUser(); test.deleteUser(); } public void selectUserByID() { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session.getMapper(IUserOperation.class); User user = userOperation.selectUserByID(1); System.out.println("selectUserByID: "+user.getUserAddress()+":"+user.getUserName()); } finally { session.close(); } } public void selectUsers() { SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation = session .getMapper(IUserOperation.class); List<User> users = userOperation.selectUsers("AAA"); for (User user : users) { System.out.println("selectUsers: "+user.getId() + ":" + user.getUserName() + ":" + user.getUserAddress()); } } finally { session.close(); } } public void addUser(){ User user=new User(); user.setUserAddress("人民广场"); user.setUserName("飞鸟"); user.setUserAge("33"); SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation=session.getMapper(IUserOperation.class); userOperation.addUser(user); session.commit(); //增加必须提交事务,否则不会写入库中。 System.out.println("addUser: id="+user.getId()); } finally { session.close(); } } public void updateUser(){ //先得到用户,然后修改,提交。 SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation=session.getMapper(IUserOperation.class); User user = userOperation.selectUserByID(1); user.setUserAddress("MMMMMMMM"); userOperation.updateUser(user); session.commit(); } finally { session.close(); } } public void deleteUser(){ SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation=session.getMapper(IUserOperation.class); userOperation.deleteUser(1); session.commit(); } finally { session.close(); } } }
五、MyBatis的关联查询
1. 增加实体Article.java
package com.jiang.mybatis.model; public class Article { private int id; private User user; private String title; private String content; .... }
2. 命名空间接口IUserOperation.java
public List<Article> getArticlesByUser(int id);
3. 映射文件User.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.jiang.mybatis.inter.IUserOperation"> <resultMap type="User" id="resultListUser"> <id column="id" property="id" /> <result column="user_name" property="userName" /> <result column="user_age" property="userAge" /> <result column="user_address" property="userAddress" /> </resultMap> <resultMap id="resultUserArticleList" type="Article"> <id property="id" column="aid" /> <result property="title" column="title" /> <result property="content" column="content" /> <association property="user" javaType="User" resultMap="resultListUser" /> </resultMap> <sql id="Base_Column_List"> user.id,user.user_name,user.user_address,article.id aid,article.title,article.content </sql> <select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList"> select <include refid="Base_Column_List"/> from user,article where user.id=article.userid and user.id=#{id} </select> </mapper>
4. 测试
public void getUserArticles(int userid){ SqlSession session = sqlSessionFactory.openSession(); try { IUserOperation userOperation=session.getMapper(IUserOperation.class); List<Article> articles = userOperation.getUserArticles(userid); for(Article article:articles){ System.out.println(article.getTitle()+" : "+article.getUser().getUserName()); } } finally { session.close(); } }
六、MyBatis的动态SQL
1. if标签
<if test="userName != null">
and user_name= #{userName}
</if>
如果userName不为null则加上if中的筛选条件
2. choose标签
<choose>
<when test="userAge != null">
and user_age = #{userAge}
</when>
<when test="userAddress != null">
and user_address= #{userAddress}
</when>
<otherwise>
and user_name = "userName"
</otherwise>
</choose>
choose标签跟switch效果一样,如果userAge不为null就增加该条件,然后退出。如果所有的when都为null,则执行otherwise中的筛选条件。
3. where标签
select * from t_blog
<where>
<if test="title != null">
title = #{title}
</if>
<if test="content != null">
and content = #{content}
</if>
</where>
where标签可以智能的处理SQL,如果标签里面的内容不全为null的话,它会自动在SQL里加入一个where语句,并且可以去掉条件中多余的AND或OR。
4. set标签
update t_blog
<set>
<if test="title != null">
title = #{title},
</if>
<if test="content != null">
content = #{content},
</if>
<if test="owner != null">
owner = #{owner}
</if>
</set>
set标签主要用于update语句,对SQL的处理和where标签一样。
5. trim标签
select * from t_blog
<trim prefix="where" prefixOverrides="and | or">
<if test="title != null">
title = #{title}
</if>
<if test="content != null">
and content = #{content}
</if>
<if test="owner != null">
or owner = #{owner}
</if>
</trim>
trim标签的作用和上面的where和set相似,如果里面条件不全为null,则加上prefix条件,并能自动去掉前面多余的and或or。
前缀prefix和后缀suffix分别对应的属性是prefixOverrides和suffixOverrides。
6. foreach标签
select * from t_news n where
<foreach collection="listTag" index="index" item="tag" open="(" separator="," close=")">
#{tag} in n.tags
</foreach>
select * from xxx where mid in
<foreach collection="mids" item="mid" open="(" separator="," close=")">
#{mid}
</foreach>
foreach标签的作用是循环的把collection指定的参数里的每个元素加入一个分支语句连接起来。标签的属性主要有 item,index,collection,open,separator,close。
collection应该是传入参数中的一个list或者数组或者map
item表示集合中每一个元素进行迭代时的别名
index指定每次迭代到的位置
open表示该语句以什么开始
separator表示在每次进行迭代之间以什么符号作为分隔符
close表示以什么结束
上面的标签转换为SQL为:
select * from xxx where mid in ( ? , ? ...)
7. selectKey标签
在使用ibatis插入数据进数据库的时候,会用到一些sequence的数据,有些情况下,在插入完成之后还需要将sequence的值返回,然后才能进行下一步的操作。 使用ibatis的selectKey就可以得到sequence的值,同时也会将值返回。不过对于不同的数据库有不同的操作方式。对于oracle:
<insert id="insertUser" parameterClass="ibatis.User">
<selectKey resultClass="long" keyProperty="id">
select SEQ_USER_ID.nextval as id from dual
</selectKey>
insert into user(id,name,password) values(#id#,#name#,#password#)
</insert>
该句话执行完之后,传进来的参数User对象里的id字段就会被赋值成sequence的值。
对于mysql
<insert id="insertUser" parameterClass="ibatis.User">
insert into user(name,password) values(#name#,#password#)
<selectKey resultClass="long" keyProperty="id">
SELECT LAST_INSERT_ID() AS ID
</selectKey>
</insert>
将selectKey放在insert之后,通过LAST_INSERT_ID()获得刚插入的自动增长的id的值。
评论
5 楼
cywhoyi
2014-05-16
在实际的网站开发中,我列举几个mybatis的好处
1.出现ORM的bug,你可以通过mybatis完全可以独立修复,hibernate当然稳定,但是如果一旦出现问题,估计够呛
2.mybatis提供多元化的宏,你可以配置velocity、freemark、自定义的director等去实现自己的宏,而非mybatis提供的#if、#foreach等
3.拦截器,两者都完成intercpter的接口,但是就个人而言mybatis的注解方式,更容易让人配置
4.sql的优化处理,我们在开发过程中,碰到性能问题,也会把sql语句捞出来,进行分析,用xml的配置和存期确实对于sql的调优帮助很大
5.mybatis取名字太俗气,弄的跟mysql,但是我就一俗人
公司里面的自定义宏,我整理一整套,现在基本开发非常方便
1.出现ORM的bug,你可以通过mybatis完全可以独立修复,hibernate当然稳定,但是如果一旦出现问题,估计够呛
2.mybatis提供多元化的宏,你可以配置velocity、freemark、自定义的director等去实现自己的宏,而非mybatis提供的#if、#foreach等
3.拦截器,两者都完成intercpter的接口,但是就个人而言mybatis的注解方式,更容易让人配置
4.sql的优化处理,我们在开发过程中,碰到性能问题,也会把sql语句捞出来,进行分析,用xml的配置和存期确实对于sql的调优帮助很大
5.mybatis取名字太俗气,弄的跟mysql,但是我就一俗人
公司里面的自定义宏,我整理一整套,现在基本开发非常方便
4 楼
ccii
2014-05-16
lvwenwen 写道
ccii 写道
lvwenwen 写道
为什么不上传工程呢
代码全部在上面了啊,你想要jar包?
上一篇博客中有源工程下载地址,包括jar包《Spring整合Mybatis》
3 楼
lvwenwen
2014-05-16
ccii 写道
lvwenwen 写道
为什么不上传工程呢
代码全部在上面了啊,你想要jar包?
2 楼
ccii
2014-05-16
lvwenwen 写道
为什么不上传工程呢
代码全部在上面了啊,你想要jar包?
1 楼
lvwenwen
2014-05-16
为什么不上传工程呢
发表评论
-
Dubbo
2015-02-25 17:36 2241一. Dubbo概述 Dubbo是Alibaba开源的 ... -
Log4j
2014-04-20 01:20 909一、Log4j基础 1. Log4j简介 Log4j是Ap ... -
ActiveMQ
2014-04-14 00:05 2032一、JMS 1. JMS简介 JMS即Java消息服务(J ... -
Maven
2014-04-06 00:57 566一、Maven 简介 1. 作为Apache组织中的一个颇为成 ... -
Struts2
2014-03-16 22:38 499一、Struts2概述 Struts2 ...
相关推荐
Spring、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...
MybatisGenerate是一个强大的工具,主要用于自动化生成Mybatis相关的代码,以提高开发效率并减少手动编写重复性工作的负担。这个工具是基于tk.mybatis框架的,它整合了Mybatis的优秀特性,使得开发者能够更加便捷地...
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs...
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 ...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在深入探讨MyBatis 3.2.6版本的源码之前,我们首先需要了解MyBatis的基本概念和功能。 MyBatis的核心部分主要包括SqlSessionFactory、...
MyBatis学习总结笔记 MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...
项目名称:MyBatis-Cipher - 高效数据脱敏工具 项目简介: MyBatis-Cipher 是一款基于 Java 语言开发的数据库敏感信息加密解密方案,专为 MyBatis 设计。它能够在数据进出数据库(DB)的过程中自动对敏感信息进行...
mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip ...
这个压缩包文件“mybatisx.zip”包含了多个版本的MybatisX插件,包括MybatisX-1.4.16.zip、MybatisX-1.4.8.zip、MybatisX-1.4.6.zip以及MybatisX-1.1.2.zip。这些版本的差异可能体现在功能增强、性能优化或者修复...
在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关重要的DTD(Document Type Definition)文件,它们定义了MyBatis配置文件和映射文件的结构和规则。 首先,让我们深入了解一下`mybatis-3...
mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的...
本篇文章将详细介绍两个针对MyBatis框架的IntelliJ IDEA插件——MyBatisCodeHelper-Pro和MybatisX,它们都是为了提升MyBatis开发体验而设计的。 首先,我们来看MyBatisCodeHelper-Pro。这款插件是专为MyBatis开发者...
MyBatis-Flex: 一个优雅的 MyBatis 增强框架。很轻量,MyBatis-Flex 整个框架只依赖 MyBatis,再无其他任何第三方依赖。只增强,MyBatis-Flex 支持 CRUD、分页查询、多表查询、批量操作,但不丢失 MyBatis 原有的...
MyBatis是一款流行的Java持久层框架,它的设计理念是通过简单的XML或注解用于配置和映射原始类型、接口和Java POJOs(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。MyBatis可以与各种数据库交互,...
MyBatis是一款强大的Java持久层框架,它将SQL与Java代码分离,使开发者可以更方便地操作数据库。这篇“MyBatis入门到精通”的学习资料是针对初学者设计的,旨在帮助新手快速掌握MyBatis的基本用法和高级特性。 1. *...
MyBatis入门 MyBatis是一个优秀的持久层框架,使用XML将SQL与程序解耦,便于维护。MyBatis学习简单,执行高效,是JDBC的延伸。MyBatis提供了数据库增删改查的便捷操作,极大提高了开发效率、统一的编码规则、利于...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...
"基于Tk MyBatis框架,mybatis 注解方式实现数据的加解密"这个主题就聚焦于如何在MyBatis框架中使用注解来实现在数据库交互过程中对数据的加密与解密。 首先,我们来看Tk MyBatis。Tk MyBatis是MyBatis的增强工具,...
MyBatis 官方中文文档 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置...