使用iBATIS3.0完成增删改查
使用iBATIS3.0完成增删改查
iBATIS3.0和以前的版本有一些改变,不过学过以前版本的再学习3.0应该不是太难,3.0要求JDK1.5支持,因为其中增加了注解和泛型,这些都是JDK1.5才有的。好了废话不多说,先来利用iBATIS3做下简单的增删改查吧。
首先到Apache(http://www.apache.org/)网站下载iBATIS3的jar 包,我下载的是ibatis-3-core-3.0.0.227.zip,解压后吧那个jar文件(ibatis-3-core-3.0.0.227.jar)添加到工程就可以了,还有一个文件(ibatis-3-core-src-3.0.0.227.zip)是源代码,可以用来查看源代码的,使用eclipse可以用它来关联源代码。
在MyEclipse新建一个Java Project,结构如下图
在jdbc.properties文件是映射文件要使用的,其内容如下:
Properties代码
- driver=com.mysql.jdbc.Driver
- url=jdbc\:mysql\://localhost\:3306/test
- username=root
- password=123456
SqlMapper.xml是iBATIS的配置文件,其代码如下:
Xml代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE configuration
- PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
- "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
- <configuration>
- <properties resource="jdbc.properties"/>
- <typeAliases>
- <typeAlias type="cn.ibatis3.test.Person" alias="Person"/>
- </typeAliases>
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
- <property name="driver" value="${driver}"/>
- <property name="url" value="${url}"/>
- <property name="username" value="${username}"/>
- <property name="password" value="${password}"/>
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <mapper resource="cn/ibatis3/test/person.xml"/>
- </mappers>
- </configuration>
上面文件中的sql映射文件person.xml代码如下:
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="cn.ibatis3.test.PersonMapper">
- <select id="selectPerson" parameterType="java.lang.Integer"
- resultType="Person">
- select * from person where id = #{id}
- </select>
- <select id="selectAll" resultType="Person">
- select * from person
- </select>
- <select id="selectPersonsByName" resultType="Person" parameterType="String">
- select * from person where name like #{name}
- </select>
- <insert id="insertPerson" parameterType="Person">
- insert into person(name,birthday,sex)
- values(#{name},#{birthday},#{sex})
- </insert>
- <delete id="deletePerson" parameterType="Person">
- delete from person where id=#{id}
- </delete>
- <update id="updatePerson" parameterType="Person">
- update person set name=#{name},birthday=#{birthday},sex=#{sex}
- where id=#{id}
- </update>
- </mapper>
注意:在iBATIS3中,属性parameterMap是不推荐使用的,在以后的版本可能会去掉这个属性。
Person.java的代码如下:
Java代码
- package cn.ibatis3.test;
- import java.util.Date;
- public class Person {
- private int id = 0;
- private String name = "";
- private String sex = "male";
- private Date birthday = null;
- public Person() {
- }
- //省略getter 和 setter 方法
- @Override
- public String toString() {
- return "id=" + id + "\t" + "name=" + name + "\t" + "sex=" + sex + "\t"
- + "birthday=" + new java.sql.Date(birthday.getTime()).toString();
- }
- }
iBATIS官方推荐我们使用单例模式创建一个sessionFactory,我这里也提供一个sessionFactory.java,呵呵,仅供参考:
Java代码
- package cn.ibatis3.test;
- import java.io.IOException;
- import java.io.Reader;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- public final class SessionFactory {
- private String resource="cn/ibatis3/test/SqlMapper.xml";
- private SqlSessionFactory sqlSessionFactory=null;
- private static SessionFactory sessionFactory=new SessionFactory();
- private SessionFactory() {
- try {
- Reader reader=Resources.getResourceAsReader(resource);
- sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
- } catch (IOException e) {
- System.out.println("#IOException happened in initialising the SessionFactory:"+e.getMessage());
- throw new ExceptionInInitializerError(e);
- }
- }
- public static SessionFactory getInstance() {
- return sessionFactory;
- }
- public SqlSessionFactory getSqlSessionFactory() {
- return sqlSessionFactory;
- }
- }
基于接口的编程(还有就是iBATIS3的注解也是在接口方法上的,关于注解以后有机会再讲,它也是iBATIS3的一个新特性),DAO层的接口PersonMapper.java代码如下:
Java代码
- package cn.ibatis3.test;
- import java.util.List;
- public interface PersonMapper {
- Person selectById(Integer id);
- List<Person> selectAll();
- List<Person> selectPersonsByName(String name);
- void insert(Person person);
- void delete(Person person);
- void update(Person person);
- }
接口的实现类PersonDao.java代码如下:
Java代码
- package cn.ibatis3.test;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- public class PersonDao implements PersonMapper {
- private SqlSessionFactory sessionFactory = SessionFactory.getInstance()
- .getSqlSessionFactory();
- public Person selectById(Integer id) {
- Person person = new Person();
- SqlSession session = null;
- try {
- session = sessionFactory.openSession();
- person = (Person) session.selectOne(
- "cn.ibatis3.test.PersonMapper.selectPerson", id);
- } finally {
- session.close();
- }
- return person;
- }
- @SuppressWarnings("unchecked")
- public List<Person> selectAll() {
- List<Person> persons = new ArrayList<Person>();
- SqlSession session = null;
- try {
- session = sessionFactory.openSession();
- persons = session
- .selectList("cn.ibatis3.test.PersonMapper.selectAll");
- } finally {
- session.close();
- }
- return persons;
- }
- public void delete(Person person) {
- SqlSession session = null;
- try {
- session = sessionFactory.openSession();
- session.delete("cn.ibatis3.test.PersonMapper.deletePerson", person);
- session.commit();
- } finally {
- session.close();
- }
- }
- public void insert(Person person) {
- SqlSession session = null;
- try {
- session = sessionFactory.openSession();
- session.insert("cn.ibatis3.test.PersonMapper.insertPerson", person);
- session.commit();
- } finally {
- session.close();
- }
- }
- public void update(Person person) {
- SqlSession session = null;
- try {
- session = sessionFactory.openSession();
- session.insert("cn.ibatis3.test.PersonMapper.updatePerson", person);
- session.commit();
- } finally {
- session.close();
- }
- }
- @SuppressWarnings("unchecked")
- public List<Person> selectPersonsByName(String name) {
- List<Person> persons = new ArrayList<Person>();
- SqlSession session = null;
- try {
- session = sessionFactory.openSession();
- System.out.println(name);
- persons = session.selectList(
- "cn.ibatis3.test.PersonMapper.selectPersonsByName", "%"
- + name + "%");
- session.commit();
- } finally {
- session.close();
- }
- return persons;
- }
- }
最后是表的创建:
Sql代码
- DROP TABLE IF EXISTS `test`.`person`;
- CREATE TABLE `test`.`person` (
- `id` int(10) unsigned NOT NULL auto_increment,
- `name` varchar(20) default NULL,
- `sex` varchar(8) default NULL,
- `birthday` datetime default NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
好了,做为一次新技术的体验吧,欢迎大家指出其中的错误或者是不恰当的地方。
17
顶
6
踩
分享到:
iBATIS3.0学习(二)使用iBATIS3.0注解完 ...
评论
ibatis3没有试验过打印sql,ibatis2通过jdk动态代理使用log4j打印sql,估计ibatis3也差不多,看下这个连接,主要看log4j.properties配置,这个文件要放到src目录下
http://winyee.iteye.com/blog/457216
这个我在网上搜索了好长时间,也试了网上说的一些办法,就是无法把产生的sql打印出来,不知道各位有没有成功经验?如果有人成功,请告诉详细方法或者给兄弟一个链接。
要亲自实验成功的方法。多谢。
qwj528 写道
楼主<mapper namespace="cn.ibatis3.test.PersonMapper"> namespace这个属性有什么作用吗? 但是必须要有namespace。 从你这个例子来看好像是个接口。
namespace仅仅是为了区分不同的xml的一个名称,至于是什么看你自己的代码习惯
楼主<mapper namespace="cn.ibatis3.test.PersonMapper"> namespace这个属性有什么作用吗? 但是必须要有namespace。 从你这个例子来看好像是个接口。
10 楼 fengyie007 2010-06-21 引用
Java代码
- public List<Person> selectAll() {
- List<Person> persons = new ArrayList<Person>();
- SqlSession session = null;
- try {
- session = sessionFactory.openSession();
- persons = session
- .selectList("cn.ibatis3.test.PersonMapper.selectAll");
- } finally {
- session.close();
- }
- return persons;
- }
使用iBATIS3.0完成增删改查的更多相关文章
- MVC3.0 EF增删改查的封装类
本人亲身使用EF CodeFirst,因为增删改查都是使用EF内置的一些方法,我想把它封装到一个类调用就行了.结合网上的资料和自己的整理,若有不对的地方望斧正,感激不尽.直接上代码吧.我就用新闻的增删 ...
- YII2.0 数据库增删改查
/*==================== dkhBaseModel 数据库增删改查方法 start ================================*/ //新增一条数据 publ ...
- hbase 2.0.2 增删改查
package cn.hbase.demo; import java.io.IOException; import java.util.Iterator; import org.apache.hado ...
- MongoDB 3.0.6 安装 增删改查
下载 安装包MSI http://yunpan.cn/cmhHdTPkXZRM2 访问密码 9b6c 上边提供的是 MongoDB 3.0.6 64Bit 的安装包 安装 如果不想直接安装在C盘.. ...
- Yii2.0高级框架数据库增删改查的一些操作(转)
yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...
- primefaces4.0基本教程以及增删改查
最近试着用了用primefaces4.0,准备写一个基本的增删改查以及分页程序,但在写的过程中发现了很多问题,本想通过百度.谷歌解决,但无奈中文资料非常少,笔者在坑中不停的打滚,终于完成了一个有着基本 ...
- Yii2.0高级框架数据库增删改查的一些操作
yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...
- EF4.0和EF5.0增删改查的写法区别及执行Sql的方法
EF4.0和EF5.0增删改查的写法区别 public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>(). ...
- 【ActionScript】ActionScript3.0对舞台组件的增删改查
以一个样例来说明ActionScript3.0对舞台组件的增删改查 例如以下图: 在Flash执行的时候,通过脚本.斜向下生成text0-text9十个文本节点. 提供两个功能. 1.在右上角,用户输 ...
随机推荐
- Nginx 安装编译配置
./configure --prefix=/usr/local/nginx-1.8.0 --with-http_ssl_module --with-http_spdy_module --with-ht ...
- OD调试篇5--如何应对OD使用中的一些问题
打开小甲鱼给的进行恶搞过的程序,会发现一些问题 发现程序直接暂停,或者加载进来有问题. 那机智的我 通过对上一个没有恶搞过的exe可执行文件的PE头进行了比较 会发现其中的猫腻 那么我们去正常的修改一 ...
- [转]Golang之struct类型
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=22312037&id=3756923 一.struct ...
- buildroot mysql
/******************************************************************** * buildroot mysql * 说明: * 这两天要 ...
- Eclipse中设置JDK内存方式
(1) 打开Eclipse,双击Serveers进入到servers编辑画面 (2) 点击 Open launch configuration 选项 (3) 选项中找到Arguments 的选项卡(t ...
- 转载 sqlserver 锁的概念
SQL server共享锁,排他锁,更新锁的使用 上一篇 / 下一篇 2009-11-08 00:29:17 / 个人分类:数据库 查看( 889 ) / 评论( 0 ) / 评分( 0 / 0 ...
- iOS学习笔记---oc语言第八天
属性 能在一定程度上简化代码,并且增强实例变量的访问安全性 属性的声明:使用@property声明属性 eg:@property NSSstring *name;相当于@interface中声明了两 ...
- python矩阵运算 不断收集整理
python矩阵运算 转自:http://blog.sina.com.cn/s/blog_5f234d4701012p64.html Python使用NumPy包完成了对N-维数组的快速便捷操作.使用 ...
- 十日谈 (share)
@拔赤 一直想写这篇“十日谈”,聊聊我对Web前端开发的体会,顺便解答下周围不少人的困惑和迷惘.我不打算聊太多技术,我想,通过技术的历练,得到的反思应当更重要. 我一直认为自己是“初级”前端开发工程师 ...
- [转载]新功能:用微软的Live Writer离线写博文
原文地址:Writer离线写博文">新功能:用微软的Live Writer离线写博文作者:新浪博客 Writer离线写博文" title="[转载]新功能:用微软的 ...