1.Mybatis下载
  Mybatis是开源的持久层框架,能够度jdbc进行简单的封装,但其并不是完全的ORM(Object Relational Mapping,对象关系映射),无法脱离数据库进行适配。目前Mybatis能够在githup上直接下载:https://github.com/mybatis/mybatis-3/releases,有多个版本可以选择。

2.Mybatis文件介绍

lib:mybatis依赖包;mybatis-3.4.6.jar:核心包;

3.mybatis配置

创建一个项目,网站/后台随意,将核心包和lib中的依赖包全都添加到项目中的lib下,没有lib自己创建,创建路径build path。
导入mybatis包后,别忘了导入数据库连接包。

4.创建配置文件

创建config配置文件夹,首先配置SqlMapConfig.xml。该文件主要用来配置数据库连接环境,在没有spring进行管理的同时对数据源进行配置,同时设置与表的映射对象。

 <?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>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="xxxx" />
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="sqlmap/User.xml"/>
</mappers> </configuration>

更多mybatis中SqlMapConfig.xml配置可以参考http://blog.knowsky.com/197049.htm,有详细的介绍。(具体关于dtd是从哪里找的,还在研究。。。)
其中<mapper>是作为映射关系。具体下面介绍。

创建log4j.properties日志设置文件:

 # Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

全局的日志设置,主要用来打印在控制台中。

5.创建映射关系类

 package com.mybatis.pojo;

 import java.io.Serializable;
import java.util.Date; public class User implements Serializable {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址

在src目录下创建User类,添加几个简单的数据。注意:Mybatis无法像hibernate那样根据类自动创建表,访问数据库时必须保证数据库存在。

6.配置映射关系文件

可以下config目录下创建sqlmap文件夹,在其中创建User.xml SQL映射文件:

 <?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">
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="test"> <select id="findUserById"
parameterType="Integer"
resultType="com.mybatis.pojo.User"
>
select * from user where id = #{v}
</select>
 </mapper>

(同样这里还是不知道dtd哪里找的),mapper标签内主要写sql语句,用过select、update、delete标签进行区别,其中namespace属性为了区分相同id的SQL语句。

设置完之后在SqlMapConfig.xml文件中加载配置文件:

7.运行测试程序

测试程序步骤:
1. 创建SqlSessionFactoryBuilder对象
2. 加载SqlMapConfig.xml配置文件
3. 创建SqlSessionFactory对象
4. 创建SqlSession对象
5. 执行SqlSession对象执行查询,获取结果User
6. 打印结果
7. 释放资源

 package com.mybatis.junit;

 import static org.junit.Assert.*;

 import java.io.File;
import java.io.InputStream;
import java.util.Properties; import javax.annotation.Resource; 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 org.junit.Test; import com.mybatis.pojo.User;
import com.mysql.jdbc.interceptors.SessionAssociationInterceptor; public class MybatisFirstTest {
@Test
public void testName() throws Exception {
//加载核心配置文件
String resource = "SqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource); //sessionFactory类
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in); //sqlSession
SqlSession sqlSession = sessionFactory.openSession(); //执行sql语句
User user = sqlSession.selectOne("test.findUserById", 1); System.out.println(user.getBirthday()); sqlSession.close();
}
}

在执行sql语句过程中"test.findUserById"就是查找的User.xml文件中test域下的id为findUserById的SQL语句。

8.CURD操作

了解mybatis的运行流程,接下来分析下增删改查操作,测试代码都差不多,主要是执行sql语句的区别:

8.1 查询

dao层根据名字模糊查询,返回需要list。

在User.xml中如下:

     <!-- id表示dao层中根据这个调用
parameterType:传入数据的类型
resultType:返回结果类型(这里返回list,mybatis会自动转成User的集合类型)
${value}:对于字符串拼接中的占位符,必须用value
#{ss}:普通占位符,ss和任意取
-->
<select id="findUserByUsername" parameterType="String" resultType="com.mybatis.pojo.User">
select * from user where username like '%${value}%'
</select>

8.2 添加

         //执行sql语句
User user = new User();
user.setUsername("li");
user.setBirthday(new Date());
user.setAddress("北京");
user.setSex("女");
sqlSession.insert("test.insertUser", user);
sqlSession.commit();

通过调用insert方法进行插入操作,注意需要进行提交操作

     <insert id="insertUser" parameterType="com.mybatis.pojo.User">

         <!-- selectKey 标签实现主键返回 -->
<!-- keyColumn:主键对应的表中的哪一列 -->
<!-- keyProperty:主键对应的pojo中的哪一个属性 -->
<!-- order:设置在执行insert语句前执行查询id的sql,孩纸在执行insert语句之后执行查询id的sql -->
<!-- resultType:设置返回的id的类型 -->
<selectKey keyColumn="id" keyProperty="id" order="AFTER"
resultType="int">
select last_insert_id()
</selectKey>
<!--传入的是User类,只要 #{username}中占位符名字与User类中的属性名一致,那么Mybatis会自动匹配 -->
insert into user(username,sex,birthday,address)
values(#{username},#{sex},#{birthday},#{address})
</insert>

8.3 更新

         //执行sql语句
User user = new User();
user.setId(1);
user.setUsername("lihhhhh");
user.setBirthday(new Date());
user.setAddress("北京2");
user.setSex("女2");
sqlSession.update("updateUserById",user);
sqlSession.commit();
 <update id="updateUserById"
parameterType="com.mybatis.pojo.User"
>
update user
set username=#{username},sex=#{sex} where id = #{id}
</update>

8.4 删除

调用语句:sqlSession.delete("deleteUserById", 1);

User.xml中:<delete id="deleteUserById" parameterType="Integer">

delete user where id = #{x}
</delete>

9.Mybatis解决jdbc的问题

  1、数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

  解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。

  2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

  解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

  3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

  解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

  4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

  解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

Mybatis学习第一天——Mybatis的安装配置以及基本CURD操作的更多相关文章

  1. MongoDB入门,安装配置与基本CURD操作

    MongoDB特点 MongoDB是NoSQL的一种,非关系型数据库,或者叫不只是关系型数据库(Not Only SQL).MongoDB采用json格式的文档存储,与Redis的key-value有 ...

  2. MyBatis学习总结(七)——Mybatis缓存(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...

  3. 【转】MyBatis学习总结(七)——Mybatis缓存

    [转]MyBatis学习总结(七)——Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualC ...

  4. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  5. 转:MyBatis学习总结(Mybatis总结精华文章)

    http://www.cnblogs.com/xdp-gacl/tag/MyBatis%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/ 当前标签: MyBatis学习总结   ...

  6. caffe学习(1):多平台下安装配置caffe

    如何在 centos 7.3 上安装 caffe 深度学习工具   有好多朋友在安装 caffe 时遇到不少问题.(看文章的朋友希望关心一下我的创业项目趣智思成) 今天测试并整理一下安装过程.我是在阿 ...

  7. Angularjs学习---ubuntu12.04中karma安装配置

    Angularjs学习---ubuntu12.04中karma安装配置中常见的问题总结   karma启动时出现了很多问题: 1.安装karma前提条件 安装karma首先要安装nodejs,npm然 ...

  8. 从零开始使用git第一篇:下载安装配置

    从零开始使用git 第一篇:下载安装配置 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:git撤销操作.分支操作和 ...

  9. MyBatis 学习记录5 MyBatis的二级缓存

    主题 之前学习了一下MyBatis的一级缓存,主要涉及到BaseExecutor这个类. 现在准备学习记录下MyBatis二级缓存. 配置二级缓存与初始化发生的事情 首先二级缓存默认是不开启的,需要自 ...

随机推荐

  1. App功能测试的注意点

    好几个月没有写博客记录学习心得了,这次回老家深夜闲来无事写一篇记录下这段时间的面试心得,这次面试过程很多面试官都问APP的有关测试,下面我就自己的认识和工作中的经验来谈谈自己对APP测试的认识: 1. ...

  2. BZOJ - 3295 三维偏序 空间转换

    题意:动态逆序对,共m次删除操作,求每次操作前的逆序对个数 删除操作转换为添加操作,首先对时间a进行简单排序 然后用cdq分治处理b维,树状数组处理c维 此时需要求的是对于某有序组\((a,b,c)\ ...

  3. SPOJ - COT 路径构造主席树

    题意:给出一个带权树,多次询问路径\((u,v)\)的第k小权值 这是主席树往区间扩展到树上的套路题 由于是按路径查询,我们无法使用dfs序,但可利用主席树对父亲扩展的方法构造出链 因此要用dfs构造 ...

  4. Mike

  5. Http Header之User-Agent

    Http Header之User-Agent User-Agent中文名为用户代理,简称 UA,它是一个特殊字符串头.通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信 ...

  6. jQuery 学习笔记(jQuery: The Return Flight)

    第一课. ajax:$.ajax(url[, settings]) 练习代码: $(document).ready(function() { $("#tour").on(" ...

  7. logback.xml文件配置(按时间、文件大小和log名称生成日志)

    之前项目中日志多用的log4j2,偶然看到在importNew看到了logback,自己查了下,发现Logback和log4j是非常相似的,其作者也是同一个人,并且logback相比于log4j性能更 ...

  8. XAMPP中Apache和Mysql启动失败问题总结

    一.Apache启动失败 xampp启动时显示的错误为: 9:52:41  [Apache]  Attempting to start Apache app... 9:52:41  [Apache]  ...

  9. ios UITableView 搜索

    自己实现 UITableView 搜索,相对于使用 UISearchDisplayController 来说自己写稍微麻烦了那么一点点,但是更加灵活.主要就是用一个字段区分出当前是搜索还是非搜索,然后 ...

  10. pyquery库简介

    html = '''<div><ul><li class="item-0">li0</li><li class="i ...