1.MyBatis框架:

  MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

2.MyBatis架构:

3.上面的架构图可能难以理解,下面的图示更能清晰明白MyBatis的具体使用流程:

  废话不多说,直接贴工程代码,通过代码解释MyBatis究竟是干嘛的,工程所需要的所有java包都在下面链接中:http://pan.baidu.com/s/1kUZmpWb

4.电影的简单增删改查工程实现:

  (1)建立数据库,建一张电影表film:

  

  (2)在工程中建立电影类Film:

  

public class Film {

    // Fields
private Long id;
private String fname; // Constructors
/** default constructor */
public Film() {
} // Property accessors
public Long getId() {
return this.id;
} public void setId(Long id) {
this.id = id;
} public String getFname() {
return this.fname;
} public void setFname(String fname) {
this.fname = fname;
} }

  (3)在工程中建立电影信息数据访问接口FilmMapper.java:

  

import java.util.List;
import java.util.Map; import com.gnc.pojo.Film; /**
* 电影信息数据访问接口
*/
public interface FilmMapper { /**
* 功能:查询所有电影
* @return
*/
public List<Film> getAllFilm(); /**
* 功能:按编号获取电影
*
* @return
*/
public Film getFilmById(int id); /**
* 功能:添加影片
*
* @param film
*/
public void insertFilm(Film film); /**
* 功能:修改影片
*
* @param film
*/
public void updateFilm(Film film); /**
* 功能:删除影片
*
* @param id
*/
public void deleteFilm(int id);
}

  (4)建立映射文件FilmMapper.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.gnc.dao.FilmMapper"> <resultMap id="filmResultMap" type="Film">
<id property="id" column="id" />
<result property="fname" column="f_name" />
<result property="fprice" column="f_price" />
</resultMap> <!-- 查询所有电影信息,对应FilmMapper接口中的getAllFilm方法 -->
<select id="getAllFilm" resultMap="filmResultMap">
select * from film
</select> <!-- 按电影编号查询电影信息,对应FilmMapper接口中的getFilmById方法 -->
<select id="getFilmById" parameterType="int" resultMap="filmResultMap">
select *
from film where id=#{id}
</select> <!-- 添加影片 -->
<insert id="insertFilm" parameterType="Film" keyProperty="id"
useGeneratedKeys="true">
insert into film (f_name) values (#{fname});
</insert> <!-- 修改影片 -->
<update id="updateFilm" parameterType="Film">
update film
<trim prefix="set" suffixOverrides=",">
<if test="fname != null">
f_name = #{fname}
</if>
</trim>
where id = #{id}
</update> <!-- 删除影片 -->
<delete id="deleteFilm" parameterType="int">
delete from film where id
= #{id}
</delete> </mapper>

  (5)建立MyBatis配置文件mybatis-config.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>
<settings>
<!-- changes from the defaults -->
<setting name="lazyLoadingEnabled" value="false" />
</settings>
<typeAliases>
<!--这里给实体类取别名,方便在mapper配置文件中使用 -->
<typeAlias alias="Film" type="com.gnc.pojo.Film" />
</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://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="geningchao" />
</dataSource>
</environment>
</environments>
<!--这里添加的是执行CRUD操作的接口对应的配置文件(xml文件) -->
<mappers>
<mapper resource="com/gnc/dao/FilmMapper.xml" />
</mappers>
</configuration>

  (6)建立测试类TestMyBaties:

  

import java.io.IOException;
import java.io.InputStream;
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.gnc.dao.FilmMapper;
import com.gnc.pojo.Film; import junit.framework.TestCase; public class TestMyBaties extends TestCase { /**
* 共6步操作完成CRUD
*
* @throws IOException
*/
public void testBaties() throws IOException { // 指定MyBatis配置文件
String RESOURCE = "mybatis-config.xml"; // 1、指定MyBaties配置文件
InputStream inputstream = Resources.getResourceAsStream(RESOURCE);
// 2、创建SqlSessionFactory()
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputstream); SqlSession session = null;
try { // 3、获取SqlSession
session = sessionFactory.openSession(); // 4、获取DAO接口对象
FilmMapper mapper = session.getMapper(FilmMapper.class); // 5、CRUD操作 // 5.1--添加影片
Film film = new Film();
film.setFname("笑傲江湖");
mapper.insertFilm(film);
session.commit();// 添加、修改、删除操作最后需要提交事务 // 5.2--修改影片"笑傲江湖"为"喜剧之王"
film = mapper.getFilmById(1);
film.setFname("喜剧之王");
mapper.updateFilm(film);
session.commit(); // 5.3--删除影片"笑傲江湖",其ID为14
// mapper.deleteFilm(1);
// session.commit(); // 5.4--获取所有电影信息
List<Film> filmList = mapper.getAllFilm(); // 显示所有电影信息
for (Film filmObj : filmList) { System.out.println("电影ID:" + filmObj.getId() + " 电影名:" + filmObj.getFname()); } } catch (Exception e) {
e.printStackTrace();
} finally {
// 6、关闭SqlSession
if (session != null) {
session.close();
}
} } }

5.工程流程解释:

  首先,电影系统中,我们要先有一个数据库用来存放电影信息,即第一步;然后需要有一个电影类,也就是第二步;接着,需要有一个对电影信息访问控制的接口,即第三步;接下来,我们一般的做法就是再建立一个java类来实现刚才的接口,实现的过程也就是sql操作,采用MyBatis框架,就将这个过程放在了xml映射文件中,即第四步;昨晚上面步骤之后,就需要进行配置MyBatis信息,即第五步,该步包括连接数据库,加载映射文件,以及给实体类取一些别名以便映射文件中简单实用.上述步骤走完之后,就可以进行测试了,测试过程分为三步:第一,加载mybatis-config.xml配置文件,获取SqlSessionFactory;第二,获取session;第三,获取DAO接口对象FilmMapper;然后就可以进行平常的操作了.

以上是本人个人观点,如有不对,希望共同交流!

MyBatis初识(通过小实例清晰认识MyBatis)的更多相关文章

  1. Spring初识(通过小实例清晰认识Spring)

    1.spring架构: spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,iba ...

  2. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  3. spring+mybatis之声明式事务管理初识(小实例)

    前几篇的文章都只是初步学习spring和mybatis框架,所写的实例也都非常简单,所进行的数据访问控制也都很简单,没有加入事务管理.这篇文章将初步接触事务管理. 1.事务管理 理解事务管理之前,先通 ...

  4. spring+mybatis之注解式事务管理初识(小实例)

    1.上一章,我们谈到了spring+mybatis声明式事务管理,我们在文章末尾提到,在实际项目中,用得更多的是注解式事务管理,这一章将学习一下注解式事务管理的有关知识.注解式事务管理只需要在上一节的 ...

  5. SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例

    SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例 这是一个简单的SpringBoot整合实例 这里是项目的结构目录 首先是pom.xml ...

  6. Mybatis案例升级版——小案例大道理

    纯Mybatis案例升级版——小案例大道理 前言: 这几天看了一本书<原则>,在上面看到了一句话叫“每个人都把自己眼界的局限当成世界的局限”,大学生是

  7. 学习 MyBatis 的一点小总结 —— 底层源码初步分析

    目录 MyBatis 如何获取数据库源? MyBatis 如何获取 sql 语句? MyBatis 如何执行 sql 语句? MyBatis 如何实现不同类型数据之间的转换? 在过去程序员使用 JDB ...

  8. mybatis的一些小总结

    好长时间没用mybatis了,现在项目忽然用mybatis,用的过程中出现了些问题,虽然解决了,不过这花的时间有些长了.总结用的过程中出现的一些问题 1.mapper.xml 之前一直用的自动生成,现 ...

  9. 【Mybatis】多对多实例

    ①创建数据库和表,数据库为mytest,表为users.orders和users_orders DROP TABLE IF EXISTS users; CREATE TABLE users( id I ...

随机推荐

  1. 表单验证——jquery validate使用说明

    //validate 选项*********************************************************** $("form").validat ...

  2. LOJ2325. 「清华集训 2017」小 Y 和恐怖的奴隶主【矩阵快速幂优化DP】【倍增优化】

    LINK 思路 首先是考虑怎么设计dp的状态 发现奴隶主的顺序没有影响,只有生命和个数有影响,所以就可以把每个生命值的奴隶主有多少压缩成状态就可以了 然后发现无论是什么时候一个状态到另一个状态的转移都 ...

  3. BZOJ1087 SCOI2005 互不侵犯King 【状压DP】

    BZOJ1087 SCOI2005 互不侵犯King Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附 ...

  4. BZOJ3196 Tyvj1730 二逼平衡树 【树套树】 【线段树套treap】

    BZOJ3196 Tyvj1730 二逼平衡树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名 ...

  5. 重温CLR(九) 接口

    对于多继承(multiple inheritance)的概念,许多程序员并不陌生,他是指一个类从两个或多个基类派生的能力.例如,假定TransmitData类的作用是发送数据,ReceiveData类 ...

  6. BW模型数据删除

    删除数据一般可以按请求(Request)来删除,需要从顶层模型往下删:也可以完成删除,在模型中就没有删除的顺序.本例中采用完全删除,但是按照从顶层模型往下的顺序删除数据.   1.删除信息立方体数据 ...

  7. Træfɪk 服务发现解决方案

    Træfɪk is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease. It s ...

  8. Eclipse与IDEA快捷键对比

    from:http://blog.csdn.net/dc_726/article/details/9531281 花了一天时间熟悉IDEA的各种操作,将各种快捷键都试了一下,感觉很是不错!于是就整理了 ...

  9. ***XX-net 和 proxyee-down

    看连接吧,留着方便自己查看 https://github.com/XX-net/XX-Net https://github.com/monkeyWie/proxyee-down/blob/master ...

  10. promise的学习心得记录

    这里只讲promise,和async的使用方法,不会讲他们的原理. Promise 是异步编程的一种解决方案,可以用于取代传统的回调函数,该变那些函数层层嵌套调用的尴尬局面. 1)promise 基本 ...