引言

本文主要从一个基础实例,讲解Mybatis的实现,已经每一步的详细讲解。我会将项目共享在百度云盘,文章最后!

1、项目结构


2、项目配置

 2.1 配置SqlMapConfig.xml

根据Mybatis架构图, 我们第一步应该配置SqlMapConfig,主要涉及到数据源的一些配置。架构请参考教材1

<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--与spring整个后环境配置将废除--><environments default="development"><environment id="development"><!--使用JDBC事务管理--><transactionManager type="JDBC"></transactionManager><!--数据库连接池--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertTonull"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--加载mapper--><mappers><mapper  resource="mapper/UserMapper.xml"/></mappers>
</configuration>

 2.1 配置sqlsessionFactory.xml

在配置SqlMapConfig中我们看到userMapper.xml,下面详细讲解如果配置sqlsessionFactory、sqlsession、mapperStatement、Executor

2.1.1Orm数据实体映射配置

我们每一个对象映射到关系型数据的一些操作,mybatis也是一种orm模型,自然免不了映射,我们以Mysql的User数据表为例子

数据库:user表

Java对象:User

public class User {private int id;private String username;// 用户姓名private String sex;// 性别private Date birthday;// 生日private String address;// 地址
//自己添加get set方法
}

2.1.1mapperStatement配置

我们的以一个User为例,创建 UserMapper.xml配置文件。把一个sql称为一个statement,这里很多mapperStatement,所以这映射文件里面,把对User的操作的sql都放在里面,即构建了mapperStatement。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--命名空间:分类管理sql隔离,方便管理-->
<mapper namespace="test"><!--id标示一个sql语句,一个Statement,封装为一个MapperStatement--><!--parameterType:传入参数类型;resultType:输出结果类型,指定映射的pojo--><!--#{}标示一个占位符,--><!--查询用户--><select id="getUserById" parameterType="int" resultType="com.ycy.mybatis.module.User">SELECT  * FROM USER WHERE id=#{id}</select><select id="findUserByName" parameterType="java.lang.String" resultType="com.ycy.mybatis.module.User">SELECT * FROM  USER  WHERE  username  LIKE  '%'||#{username}||'%'</select><!--新增用户--><insert id="insertUser" parameterType="com.ycy.mybatis.module.User" ><!--插入值之后返回主键值--><selectKey resultType="int" order="AFTER" keyProperty="id">SELECT LAST_INSERT_ID()</selectKey>INSERT  INTO USER  (username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})</insert><!--删除用户--><delete id="deleteUser" parameterType="int">DELETE  FROM USER  WHERE  id=#{id}</delete><!--更新用户--><update id="updateUser" parameterType="com.ycy.mybatis.module.User">UPDATE USER  SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}</update>
</mapper>

2.1.1sqlsessionFactory创建sqlsession

我们必须知道,所有的sql配置都是需要一个sqlsession来执行会话操作,因为session本身意思就是一次会话。需要sqlsession就必须构建一个sqlsessionFactory,下面我们用两种方式来建立会话,进行数据库操作。

2.1.1.1通过junit测试操作会话

我们直接在junit中读取sqlMapConfig.xml,调用会话

 测试类:MybatisFrist
import com.ycy.mybatis.module.User;
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.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;/*** Created by Administrator on 2015/8/28 0028.*/
public class MybatisFrist {private SqlSessionFactory sqlSessionFactory = null;//创建工厂@Beforepublic void before() throws IOException {//创建会话工厂String resource = "SqlMapConfig.xml";InputStream in = null;in = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);}@Testpublic void testGet() {//1通过sqlsessionfactory创建sqlsessionSqlSession sqlSession = sqlSessionFactory.openSession();//2通过sqlsession操作数据库User user = sqlSession.selectOne("test.getUserById", 1);System.out.println(user.getUsername());sqlSession.close();}@Testpublic void testSelect() {//1通过sqlsessionfactory创建sqlsessionSqlSession sqlSession = sqlSessionFactory.openSession();//2通过sqlsession操作数据库List<User> userList = sqlSession.selectList("test.findUserByName", "小");System.out.println(userList.size());for (User user : userList) {System.out.println(user.getUsername());}sqlSession.close();}@Testpublic void testInsert() {User user = new User();user.setUsername("杨长用");user.setAddress("重庆");user.setBirthday(new Date());user.setSex("1");//1通过sqlsessionfactory创建sqlsessionSqlSession sqlSession = sqlSessionFactory.openSession();//2通过sqlsession操作数据库sqlSession.insert("test.insertUser", user);sqlSession.commit();sqlSession.close();System.out.println("--------" + user.getId());}@Testpublic void testDel() {//1通过sqlsessionfactory创建sqlsessionSqlSession sqlSession = sqlSessionFactory.openSession();//2通过sqlsession操作数据库sqlSession.insert("test.deleteUser", 27);sqlSession.commit();sqlSession.close();}@Testpublic void testUpdate() {User user = new User();user.setUsername("杨长用修改");user.setAddress("重庆");user.setBirthday(new Date());user.setSex("1");user.setId(27);//1通过sqlsessionfactory创建sqlsessionSqlSession sqlSession = sqlSessionFactory.openSession();//2通过sqlsession操作数据库sqlSession.insert("test.updateUser", user);sqlSession.commit();sqlSession.close();System.out.println("--------" + user.getId());}
}

2.1.1.2通过接口的方式操作会话

请注意以上直接读取文件的方式,与通过接口方式的区别。我们只是把操作封装了一下,因为实际项目我们不可能写硬编码(直接写死参数值),仍然用junit测试。

Java对象:UserService

public interface UserService {public User getUserById(int id) throws Exception;public List<User> findUserByName(String name) throws Exception;public void  insertUser(User user) throws  Exception;
}

Java对象:UserService

package com.ycy.mybatis.dao.impl;import com.ycy.mybatis.dao.UserService;
import com.ycy.mybatis.module.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;import java.util.List;/*** Created by Administrator on 2015/8/31 0031.*/
public class UserServiceImpl implements UserService {private  SqlSessionFactory sqlSessionFactory;public  UserServiceImpl(SqlSessionFactory sqlSessionFactory){this.sqlSessionFactory=sqlSessionFactory;}@Overridepublic User getUserById(int id) throws Exception {SqlSession sqlSession=sqlSessionFactory.openSession();User user= sqlSession.selectOne("test.getUserById", id);sqlSession.close();return user;}@Overridepublic List<User> findUserByName(String name) throws Exception {SqlSession sqlSession=sqlSessionFactory.openSession();List<User> userList= sqlSession.selectList("test.findUserByName", name);sqlSession.close();return userList;}@Overridepublic void insertUser(User user) throws Exception {SqlSession sqlSession=sqlSessionFactory.openSession();//2通过sqlsession操作数据库sqlSession.insert("test.insertUser", user);sqlSession.commit();sqlSession.close();}
}
测试类:MybatisTest2

由于篇幅关系,我们只做根据Id查询用户

package com.ycy.mybatis.test;import com.ycy.mybatis.dao.impl.UserServiceImpl;
import com.ycy.mybatis.module.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;/*** Created by Administrator on 2015/8/31 0031.*/
public class MybatisTest2 {private SqlSessionFactory sqlSessionFactory = null;@Beforepublic void  before() throws IOException {String resource="SqlMapConfig.xml";InputStream in =Resources.getResourceAsStream(resource);sqlSessionFactory= new  SqlSessionFactoryBuilder().build(in);}@Testpublic void  testGet() throws Exception {UserServiceImpl userService=new UserServiceImpl(sqlSessionFactory);User user= userService.getUserById(1);System.out.println(user.getUsername());}
}

输出结果:

如有疑问:qq群:78275755(目前木有人,来啦更好)
本项目1-5章 初级教程 项目百度分享盘:
http://pan.baidu.com/s/1o63SUaI

mybatis学习教程(二)初级的增、删、查、改相关推荐

  1. Mybatis学习笔记【part03】增删改查

    Mybatis 学习笔记 Part03 1.传入参数与返回参数设置(查) <!-- 根据 id 查询 --> <select id="findById" resu ...

  2. MongoDB学习总结(二) —— 基本操作命令(增删改查)

    上一篇介绍了MongoDB在Windows平台下的安装,这一篇介绍一下MongoDB的一些基本操作命令. 下面我们直奔主题,用简单的实例依次介绍一下. > 查看所有数据库 (show dbs) ...

  3. java 增 删 查 改_如何对java链表进行增、删、查、改操作

    如何对java链表进行增.删.查.改操作 发布时间:2020-06-23 10:41:33 来源:亿速云 阅读:79 作者:Leah 如何对java链表进行增.删.查.改操作?针对这个问题,今天小编总 ...

  4. [MyBatis学习笔记] 二、Mybatis基本操作及相关标签介绍

    [MyBatis学习笔记] 二.Mybatis基本操作及相关标签介绍 一.Mybatis简介 二.简单的CRUD操作 1.构建SqlSessionFactory (1)编辑mybatis-config ...

  5. Mybatis学习总结二

    Mybatis学习总结二 0.不需要修改的文件(在src下面) jdbc.properties文件 log4j.properties文件 SqlMapConfig.xml文件 1.高级结果映射 1.1 ...

  6. Mysql学习笔记(六)增删改查

    原文:Mysql学习笔记(六)增删改查 PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into tab ...

  7. 数据结构:二叉搜索树的增删查改

    二叉搜索树的增删查改 二叉搜索树(Binary Search Tree) 基本操作之查找(Update) 基本操作之修改(Update) 基本操作之增加(Create) 基本操作之删除(Delete) ...

  8. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  9. 微软Connect教程系列--自动生成增删改查页面工具介绍(二)

    本章课程描述了vs2015的三个特点,其中主要将描述在vs2015下面,使用命令自动生成增删改查界面,具体如下: 1.web.config文件不在存在,用config.json替代,以适应支撑vs的插 ...

  10. SQLAlchemy教程(二)基本增删改查

    增删改查 增: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_enginefrom s1 import m ...

最新文章

  1. 从oracle中读取图片,Pb从oracle中读取和保存图片
  2. Swift 获取渐变色颜色值
  3. 带你看android的内心世界
  4. java web开发问题集合
  5. python集合的加减_python 中对list做减法操作
  6. Veeam FAQ系列转载(一):备份
  7. 【Swift 4.0】扩展 WCDB 支持 SQL 语句
  8. MySQL服务器意外关机-无法启动多实例
  9. JavaScript函数赋值变量
  10. java算法面试题_Java算法面试题汇总
  11. 3dmax贴图材料丢失如何恢复
  12. 禅道开源版安装 - windows
  13. java小游戏实训目的_Java弹球小游戏实验报告.doc
  14. 【Java】基础09
  15. 51单片机实战教程(22 看门狗)
  16. DSP F2803x中CLA模块介绍
  17. zabbix4.0配置钉钉机器人告警详细教程
  18. wireshark协议解析错误解决方法
  19. Python实现素描画
  20. Revit二次开发——族库管理插件的开发思路

热门文章

  1. shell 与 空格
  2. Spring MVC 启动
  3. 单机PC手动更改windows update 地址
  4. PHP与C sharp互解加密算法
  5. sugarnms网管软件实用吗?
  6. WebPart中的ReplaceTokens 方法
  7. 注册确认邮件中图片不显示的问题
  8. You must define a PAYPAL_PAYFLOW_VENDOR_ID setting
  9. RuntimeError: Model class cmdb.models.UserInfo doesn't declare an explicit app_label
  10. pipe实现单工和半双工模式