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

简介: 引言 本文主要从一个基础实例,讲解Mybatis的实现,已经每一步的详细讲解。我会将项目共享在百度云盘,文章最后! 1、项目结构 2、项目配置  2.1 配置SqlMapConfig.xml         根据Mybatis架构图, 我们第一步应该配置SqlMapConfig,主要涉及到数据源的一些配置。

引言

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


1、项目结构


2、项目配置

 2.1 配置SqlMapConfig.xml

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

<!DOCTYPE configuration
        PUBLIC "-//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.1 mapperStatement配置

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

<?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">
<!--命名空间:分类管理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.1 sqlsessionFactory创建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;

    //创建工厂
    @Before
    public void before() throws IOException {
        //创建会话工厂
        String resource = "SqlMapConfig.xml";
        InputStream in = null;
        in = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);


    }

    @Test
    public void testGet() {
        //1通过sqlsessionfactory创建sqlsession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //2通过sqlsession操作数据库
        User user = sqlSession.selectOne("test.getUserById", 1);
        System.out.println(user.getUsername());
        sqlSession.close();
    }

    @Test
    public void testSelect() {
        //1通过sqlsessionfactory创建sqlsession
        SqlSession 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();
    }

    @Test
    public void testInsert() {
        User user = new User();
        user.setUsername("杨长用");
        user.setAddress("重庆");
        user.setBirthday(new Date());
        user.setSex("1");
        //1通过sqlsessionfactory创建sqlsession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //2通过sqlsession操作数据库
        sqlSession.insert("test.insertUser", user);
        sqlSession.commit();
        sqlSession.close();

        System.out.println("--------" + user.getId());
    }

    @Test
    public void testDel() {
        //1通过sqlsessionfactory创建sqlsession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //2通过sqlsession操作数据库
        sqlSession.insert("test.deleteUser", 27);
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void testUpdate() {
        User user = new User();
        user.setUsername("杨长用修改");
        user.setAddress("重庆");
        user.setBirthday(new Date());
        user.setSex("1");
        user.setId(27);
        //1通过sqlsessionfactory创建sqlsession
        SqlSession 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;
    }
    @Override
    public User getUserById(int id) throws Exception {
        SqlSession sqlSession=sqlSessionFactory.openSession();
       User user= sqlSession.selectOne("test.getUserById", id);
        sqlSession.close();
        return user;
    }

    @Override
    public List<User> findUserByName(String name) throws Exception {
        SqlSession sqlSession=sqlSessionFactory.openSession();
       List<User> userList= sqlSession.selectList("test.findUserByName", name);
        sqlSession.close();
        return userList;
    }

    @Override
    public 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;
    @Before
    public void  before() throws IOException {
    String resource="SqlMapConfig.xml";
        InputStream in =Resources.getResourceAsStream(resource);
        sqlSessionFactory= new  SqlSessionFactoryBuilder().build(in);
    }
    @Test
    public 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

目录
相关文章
|
1月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
166 3
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
508 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
207 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
3月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
51 5
|
4月前
|
XML 缓存 Java
一文讲明Mybatis 的使用 超详细 【爆肝两万字教程】
文章提供了一份详尽的Mybatis使用教程,涵盖了Mybatis的简介、环境搭建、基本操作、配置解析、日志使用、分页、注解开发、多对一和一对多关系处理、动态SQL以及缓存机制等方面的内容,并提供了相应的代码示例和测试用例。
一文讲明Mybatis 的使用 超详细 【爆肝两万字教程】
|
4月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
4月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
4月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
下一篇
DataWorks