作者:Vinkn 来自http://www.cnblogs.com/Vinkn/

一、简介

  Ibatis简介:

  Ibatis是一个类似于Hibernate的数据库ORM(对象关系映射,通俗点就是将数据库表的一行与对象之间的转换),但是又不同于自动化的Hibernate,他是一个半自动的ORM,需要自己写sql语句,通过ORM框架,让你不再去自己加载数据库驱动,建立连接...

  sqlite简介:

  这是一个小型的数据库,使用它不需要安装,也仅仅只有一个数据文件(缺点是没有加密功能)。

简介百度一下,很多,简单的入门教程也很多,本片着重讲解Ibatis与sqlite集成。

二、环境搭建

1、创建数据库文件

  在建立项目之前推荐先建好数据库文件,建好里面的表字段,推荐使用工具SQLite DataBase Browser。

2、建立项目与导包  建立一个项目java project,将需要的两个包放到lib目录下,添加到环境中。

  ibatis-2.3.4.726.jar

  sqlite-jdbc-3.7.2.jar

三、配置文件

1、Ibatis配置文件

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
 "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
 <sqlMapConfig>
     <!-- 使用JDBC的事务管理 -->
     <transactionManager type="JDBC">
         <!-- 数据源 -->
         <dataSource type="SIMPLE">
             <property name="JDBC.Driver" value="org.sqlite.JDBC" />
             <property name="JDBC.ConnectionURL" value="jdbc:sqlite:test.db" />
             <property name="JDBC.Username" value="" />
             <property name="JDBC.Password" value="" />
         </dataSource>
     </transactionManager>
     <!--实体的映射文件 -->
     <sqlMap resource="com/loadfate/domain/User.xml" />
 </sqlMapConfig>

JDBC.ConnectionURL在不同环境下配置不同
Ⅰ、Java Project中:

  jdbc:sqlite:test.db为项目路径下。

Ⅱ、Web项目中:

  数据库文件在src中时:             jdbc:sqlite::resource:upgradeserver.db
  数据库文件在windows系统中时:     jdbc:sqlite:/D:/upgradeserver.db
  数据库文件在linux路径中时:       jdbc:sqlite://home/zwq/upgradeserver.db

2、mapper配置文件

 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
 "http://ibatis.apache.org/dtd/sql-map-2.dtd">

 <sqlMap>
     <!--别名 -->
     <typeAlias alias="User" type="com.loadfate.domain.User" />
     <!--查询全部用户 -->
     <select id="selectAllUser" resultClass="User">
         select * from user
     </select>
     <!--通过Id查询,参数为int时,使用id取值 -->
     <select id="selectUserById" parameterClass="int" resultClass="User">
         select * from user where userid=#id#
     </select>
     <!--添加用户 -->
     <insert id="addUser" parameterClass="User">
         insert into user(username,password) values (#username#,#password#)
     </insert>
     <!--删除用户 -->
     <delete id="deleteUserById" parameterClass="int">
         delete from user where userid=#id#
     </delete>
     <!--更改用户 -->
     <update id="updateUser" parameterClass="User">
         update user set username=#username#,password=#password# where userid=#userid#
     </update>
 </sqlMap>

四、实现详解

1、IbatisUtil

 private static SqlMapClient sqlMapClient = null;
     static {
         try {
             //加载配置文件
             Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
             sqlMapClient=SqlMapClientBuilder.buildSqlMapClient(reader);
             reader.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }

     private IbatisUtil() {
     }

     public static SqlMapClient getSqlMapClient() {
         return sqlMapClient;
     }

2、UserDao

     SqlMapClient sqlMapClient = IbatisUtil.getSqlMapClient();

     // 添加用户
     public void addUser(User user) {
         try {
             sqlMapClient.insert("addUser", user);
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }
     // 更新用户
     public void updateUser(User user) {
         try {
             sqlMapClient.update("updateUser", user);
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }
     // 删除用户
     public void deleteUser(User user) {
         try {
             sqlMapClient.insert("deleteUserById", user.getUserid());
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }

     // 获取所有用户
     @SuppressWarnings("unchecked")
     public List<User> getAllUsers() {
         List<User> users = null;
         try {
             users = sqlMapClient.queryForList("selectAllUser");
         } catch (SQLException e) {
             e.printStackTrace();
         }
         return users;
     }

     // 通过id获取用户
     public User getUser(int userid) {
         User user = null;
         try {
             user = (User) sqlMapClient.queryForObject("selectUserById", userid);
         } catch (SQLException e) {
             e.printStackTrace();
         }
         return user;
     }

3、Test

 public static void main(String[] args) {
         User user=new User();
         user.setUsername("张三");
         user.setPassword("123456");
         UserDao userDao=new UserDao();
         userDao.addUser(user);

         User user2=userDao.getUser(1);
         System.out.println(user2.getUsername());
     }

五、下载地址

项目文件夹:ibatis4sqlite

下载地址:http://pan.baidu.com/s/1bn1Y6BX

如果有什么疑问或者建议,请联系我

ibatis集成Sqlite:小数据库也有大作用的更多相关文章

  1. ORM数据库框架 SQLite 常用数据库框架比较 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. Android SQLite轻量级数据库(简单介绍)

    SQLite它是相当于嵌入到安卓里的一个小数据库吧, 它也可以使用SQL语句进行数据库的增删改查操作,但是是SQL1992的语句. 然后SQLite也有自己的语句,但是学过SQL的应该都会发现,它比较 ...

  3. SQLite/嵌入式数据库

    SQLite/嵌入式数据库 的项目要么不使用数据库(一两个文配置文件就可以搞定),要么就会有很多的数据,用到 postgresql,操练sqlite的还没有.现在我有个自己的小测试例子,写个数据库对比 ...

  4. 关于PDF.NET开发框架对Mysql Sqlite PostgreSQL数据库分页支持的个人看法

    关于PDF.NET开发框架的名字由来  在设计www.pwmis.com站点的时候,考虑到架构的兼容性和将来升级的可能性,最重要的是没有足够的时间去为网站添加和维护很多复杂的程序,所以在借鉴前人成功经 ...

  5. nodejs集成sqlite

    正在物色node上面的轻量级嵌入式数据库,作为嵌入式数据库的代表,sqlite无疑是个理想的选择方案.npm上集成sqlite的库主要有两个——sqlite3和realm. realm是一个理想的选择 ...

  6. Eclipse rap 富客户端开发总结(11) : rcp/rap与spring ibatis集成

    1. rcp/rap 与 spring 集成 Activator 是rcp/rap 启动时需要加载的类, 只需要加载一遍,所以与spring 集成的时候一般是在这个类里面加载spring 的Appli ...

  7. Unity3D游戏开发之SQLite让数据库开发更简单

    各位朋友大家好.欢迎大家关注我的博客,我是秦元培,我是博客地址是http://blog.csdn.net/qinyuanpei.在经历了一段时间的忙碌后,博主最终有时间来研究新的东西啦,今天博客向和大 ...

  8. sqlite嵌入式数据库C语言基本操作(2)

    :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1);border-radius:3px ...

  9. sqlite嵌入式数据库C语言基本操作(1)

    sqlite嵌入式数据库C语言基本操作(1) :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0, ...

随机推荐

  1. Reachability几个常用方法

    http://oncerios.diandian.com/post/2013-06-28/40050041969

  2. c语言 快速排序---归并排序----堆排序

    //快速排序: #include <stdio.h> #define MAX 500000 int s[MAX]; void Q_Sort(int start,int end) { int ...

  3. 关于数据库一致改关闭下redo日志文件丢失的处理办法的总结

    数据库一致性关闭下redo日志文件丢失的处理办法(归档和非归档都行) 1. inactive log  在一致性关闭后删除重启时可以在mount下(不丢失数据) alter database clea ...

  4. IDEA新建SpringMVC项目报错解决办法

    网页运行的错误: HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundE ...

  5. 快速设计一个简单的WPF串口上位机

    最近一直在学习UWP,其中有的技术参考了WPF,所以又回头再来学习WPF,感觉学的东西很杂,必须记录一下,不然时间长了还得忘掉,于是申请开始写博客,将学习的心得记录一下,以备后用.这次是因为公司内训, ...

  6. iOS截取视频缩略图的两种方法

    前言: 看完了使用MPMoviePlayerController播放在线视频,在实际应用中有时候须要获取视频的缩略图,我们来看看怎样截取指定时间内的视频缩略图. 一  使用MPMoviePlayerC ...

  7. nandflash中oob、ecc分析

    1.为何需要分析? 最近一直接触这类驱动,如果对它的原理不懂的话,驱动调试会很麻烦!!!!!! 2.ecc? nand的纠错能力,目前有1位.4位和8位,也就是说在512字节中如果是4位的ecc那就可 ...

  8. APP安全环节缺失,手游运营商怎样应对APP破解困境

    2013年手游行业的规模与收入均实现了大幅增长,发展势头强劲.然而,在手游快速发展的同一时候,因为监管.审核等方面存在着漏洞,手机游戏软件被破解后注入恶意代码.盗取用户財产.窃取用户设备信息的现象屡见 ...

  9. DIV+CSS区块框浮动设计

    在页面布局的时候,能够用绝对定位来实现,可是因为调整某个区块框时其它区块的位置不会对应的改变,所以这并非布局的首选方式.可是使用浮动的区块框能够向左或向右移动,直到它的外边缘碰到包括它区块的边框或还有 ...

  10. [CodeForce]356D Bags and Coins

    已知有n个包,和总共s个钱币. n,s<=70000. 每个包可以装钱币,还可以套别的包.每个包中的钱数等于 所有套的包的钱数 加上 自己装的钱. 所有的钱都在包内. 问给定每个包中的钱数,输出 ...