测试版本

mybatis:3.2.8

数据库:mysql

项目结构

jar包准备

mybatis-3.2.8.jar

mysql-connector-java-5.1.39-bin.jar

junit-4.4.jar

log4j-1.2.17.jar

配置文件

1、jdbc.properties配置文件:

jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.1.0.1:3306/db_mybatis
jdbc.username=root
jdbc.password=root

2、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> <properties resource="jdbc.properties"></properties>
<typeAliases>
<typeAlias type="com.cz.model.Student" alias="Student"/> <!-- 类型别名 -->
</typeAliases> <environments default="development"> <!-- 默认开发环境 -->
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="com/cz/mappers/StudentMapper.xml"/>
</mappers> </configuration>

其中typeAliases是为了指定类型别名,这样使用到com.cz.model.Student类时直接使用Student代替即可。

创建SqlSessionFactoryUtil工具类

该工具类主要是加载mybatis配置文件并通过相应的builder生成session工厂,再从工厂产生sql session对象,这里使用到了单例设计模式(懒汉式):

package com.cz.utill;

import java.io.IOException;
import java.io.InputStream; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class SqlSessionFactoryUtil { private static SqlSessionFactory sqlSessionFactory; private SqlSessionFactoryUtil() {} private static SqlSessionFactory getSqlSessionFactory() {
if (sqlSessionFactory == null) {
// 读取mybatis配置
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
return sqlSessionFactory;
} public static SqlSession openSession(){
return getSqlSessionFactory().openSession();
}
}

创建实体映射类

实体类Student.java,这里只有三个属性:

package com.cz.model;

public class Student {

    private Integer id;
private String name;
private int age; public Student(String name, int age) {
super();
this.name = name;
this.age = age;
} public Student() {
super();
} public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }

编写Dao接口

mybatis支持传统的类似hibernate的Dao层封装数据库操作,也支持面向mapper.xml映射文件的动态sql类型,如果使用传统的Dao数据库编程模型的话,需要在相应的Dao类中注入sql session工厂对象(一般通过构造注入),这里使用后一种方式即mapper配置:

package com.cz.mappers;

import java.util.List;

import com.cz.model.Student;

public interface StudentDao {
/**
* 新增
* @param student
* @return
*/
public int add(Student student);
/**
* 修改
* @param student
* @return
*/
public int update(Student student);
/**
* 删除
* @param student
* @return
*/
public int delete(Integer id);
/**
* 根据id查找
* @param id
* @return
*/
public Student findById(Integer id);
/**
* 查找
* @param id
* @return
*/
public List<Student> find();
}

mapper.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.cz.mappers.StudentDao"> <resultMap type="Student" id="StudentResult">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
</resultMap> <!-- 插入 -->
<insert id="add" parameterType="Student">
insert into t_student values(null,#{name},#{age})
</insert> <update id="update" parameterType="Student">
update t_student set name = #{name},age = #{age} where id = #{id}
</update> <delete id="delete" parameterType="Integer">
delete from t_student where id = #{id}
</delete> <select id="findById" resultMap="StudentResult" parameterType="Integer">
select * from t_student where id = #{id}
</select> <select id="find" resultMap="StudentResult">
select * from t_student
</select>
</mapper>

dao接口跟mapper文件的对应关系如下:

添加log4j日志记录

添加jar包:log4j-1.2.17.jar

编写测试类StudentServiceTest.java:

package com.cz.service;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger; import com.cz.mappers.StudentDao;
import com.cz.model.Student;
import com.cz.utill.SqlSessionFactoryUtil; public class StudentServiceTest { public static Logger logger = Logger.getLogger(StudentServiceTest.class); public static void main(String[] args) { SqlSession sqlSession = SqlSessionFactoryUtil.openSession();
StudentDao studentDao = sqlSession.getMapper(StudentDao.class); //返回student dao接口
int result = studentDao.add(new Student("张三", 20));
sqlSession.commit();
if (result > 0) {
logger.info("测试成功");
}
} }

使用junit单元测试

添加junit-4.4.jar,单元测试代码:

package com.cz.test;

import java.util.Iterator;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.cz.mappers.StudentDao;
import com.cz.model.Student;
import com.cz.utill.SqlSessionFactoryUtil; public class StudentTest { public static Logger logger = Logger.getLogger(StudentTest.class);
SqlSession sqlSession = null;
StudentDao studentDao = null; // 返回student dao接口 @Before
public void setUp() throws Exception {
sqlSession = SqlSessionFactoryUtil.openSession();
studentDao = sqlSession.getMapper(StudentDao.class);
logger.info("开始执行了");
} @After
public void tearDown() throws Exception {
sqlSession.close();
logger.info("执行结束了");
} @Test
public void testAdd() throws Exception {
Student student = new Student("admin", 22);
int result = studentDao.add(student);
sqlSession.commit();
if (result > 0) {
logger.info("添加成功了");
}
} @Test
public void testUpdate() throws Exception {
Student student = new Student(24, "xxxxxxx", 21);
int result = studentDao.update(student);
sqlSession.commit();
if (result > 0) {
logger.info("修改成功了");
}
} @Test
public void testDelete() throws Exception {
int result = studentDao.delete(26);
sqlSession.commit();
if (result > 0) {
logger.info("删除成功了");
}
} @Test
public void testFindById() throws Exception {
Student student = studentDao.findById(25);
System.out.println(student.toString());
sqlSession.commit();
} @Test
public void testFind() throws Exception {
List<Student> students = studentDao.find();
// Iterator<Student> iterator = students.iterator();
// while (iterator.hasNext()) {
// System.out.println(iterator.next());
// }
// for(Student s:students){
// System.out.println(s.toString());
// }
Student student = null;
for (int i = 0; i < students.size(); i++) {
student = students.get(i);
System.out.println(student.toString());
}
sqlSession.commit();
}
}

测试结果:

mybatis学习之入门实例的更多相关文章

  1. Eclipse插件开发_学习_02_GEF入门实例

    一.前言 这一节,我们将会创建一个GEF入门实例 二.新建RCP项目 1. New 一个 Plug-in Project 2.输入项目名 项目名:com.ray.gef.helloworld 3.Co ...

  2. vue.js学习之入门实例

    之前一直看过vue.js官网api,但是很少实践,这里抽出时间谢了个入门级的demo,记录下一些知识点,防止后续踩坑,牵扯到的的知识点:vue.vue-cli.vue-router.webpack等. ...

  3. MonoRail学习-入门实例篇

    1.到官方网站下载安装文件,地址如下: http://www.castleproject.org/index.php/Castle:Download目前最新版本Beta5(您也可以不需要下载,直接使用 ...

  4. mybatis 简单的入门实例

    第一步:添加mybaties的架包 第二步:配置mybaties的文件 <?xml version="1.0" encoding="UTF-8" ?> ...

  5. webpack学习之入门实例

    webpack:前端打包神器,目前活跃度甚至超过了gulp.grunt等,使用webpack打包,简单快速,下面记录下webpack环境搭建以及基本使用: 1.首先新建一个空白目录,用于项目根目录,比 ...

  6. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  7. mybatis学习一:基于xml与注解配置入门实例与问题

    注:本case参考自:http://www.cnblogs.com/ysocean/p/7277545.html 一:Mybatis的介绍: MyBatis 本是apache的一个开源项目iBatis ...

  8. MyBatis学习总结(一)简单入门案例

    MyBatis学习总结(一)简单入门案例 主要内容:本文主要通过对数据库中的use表进行增删改查总结mybatis的环境搭建和基本入门使用 一.需要的jar包: 1.核心包 2.依赖包 3.jdbc数 ...

  9. Mybatis学习笔记之一(环境搭建和入门案例介绍)

    一.Mybatis概述 1.1 Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了go ...

随机推荐

  1. vs 页面浏览不显示.aspx后缀名

    转:http://www.cnblogs.com/hllive/p/6029763.html 由vs2013新建“web窗体应用程序”的网站,URL不显示扩展名.那今天就实现该功能 1.首先打开vs2 ...

  2. leetcode 33 Search in Rotated Sorted Array JAVA

    题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在这个 ...

  3. Mysql数据类型《二》字符类型

    字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参数指的都是字符的长度 #char类型:定 ...

  4. code::blocks学习

    code::block不能调试问题 今天在codeblock不能进行调试,百度总结如下: 1 进行调试的必须是一个project而不能是一个单一的cpp文件. 2 project的路径不能包含中文,尽 ...

  5. 整理javascript基础

    原始类型值(Primitive values) 下面的全是原始类型值(简称:原始值): 布尔类型:true,false 数字类型:1736,1.351 字符串类型: 'abc',"abc&q ...

  6. Ajax请求的一个重要属性contentType

    比如 contentType : 'application/json;charset=UTF-8', 或者 contentType : 'text/html;charset=UTF-8', 如果不加此 ...

  7. HDU6184【Counting Stars】(三元环计数)

    题面 传送门 给出一张无向图,求 \(4\) 个点构成两个有公共边的三元环的方案数. 题解 orz余奶奶,orz zzk 首先,如果我们知道经过每条边的三元环个数\(cnt_i\),那么答案就是\(\ ...

  8. Bad Smell (代码的坏味道)

    sourcemaking 如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹.正如食物要腐坏之前,经常会发出一些异味一样, 我们管这些痕迹叫做 "代码异味" ...

  9. Eclipse Alt + / 快捷键失效

    需要重新设置快捷键.按快捷键ctrl+shirt+L,然后在按一下L.设置快捷键的对话框就出来了,然你将Word Completion移除,在将Content Assist 这个设置为alt+/.就可 ...

  10. React第二篇:组件的生命周期

    前言:因为生命周期是必须要掌握的,所以React的第二篇咱就写这. (版本:16.3.2) React的生命周期大致分为四个状态:分别是Mouting.Updating.Unmounting.Erro ...