基于Mybatis实现CRUD操作过程解析(xml方式)

1、环境搭建

1.1 表结构

create table user (
 id int primary key auto_increment,
 username varchar(20) not null,
 birthday date,
 sex char(1) default '男',
 address varchar(50)
);

insert into user values (null, '孙悟空','1980-10-24','男','花果山水帘洞');
insert into user values (null, '白骨精','1992-11-12','女','白虎岭白骨洞');
insert into user values (null, '猪八戒','1983-05-20','男','福临山云栈洞');
insert into user values (null, '蜘蛛精','1995-03-22','女','盤丝洞');

1.2 创建项目

导入如下jar

  • mybatis框架包
  • 数据库驱动包
  • log4j日志包
  • junit单元测试包

1.3 准备配置文件

在src下准备配置文件:sqlMapConfig.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>
  <!--配置数据库连接参数-->
  <environments default="mybatis">
    <environment id="mybatis">
      <!--事务管理器-->
      <transactionManager type="JDBC"></transactionManager>
      <!--配置数据源-->
      <dataSource type="pooled">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///test"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

在 src 下准备配置文件: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

2-增删改查源码

1.1 执行结果

1.2 User类代码

import java.sql.Date;

/**
 用户实体类对象 */
public class User {

  private Integer id;
  private String username;
  private Date birthday;
  private String sex;
  private String address;

  public User() {
  }

  public User(Integer id, String username, Date birthday, String sex, String address) {
    this.id = id;
    this.username = username;
    this.birthday = birthday;
    this.sex = sex;
    this.address = address;
  }

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public Date getBirthday() {
    return birthday;
  }

  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }

  public String getSex() {
    return sex;
  }

  public void setSex(String sex) {
    this.sex = sex;
  }

  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  @Override
  public String toString() {
    return "User{" +
        "id=" + id +
        ", username='" + username + '\'' +
        ", birthday=" + birthday +
        ", sex='" + sex + '\'' +
        ", address='" + address + '\'' +
        '}';
  }
}

1.3 UserMapper接口代码

package com.vg.dao;

import com.vg.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
/**
 * 数据访问层接口:对用户进行增删改查操作
 */
public interface UserMapper {
	/**
	 * 添加用户
	 */
	int addUser(User user);
	/**
	 * 根据id删除用户
	 */
	void deleteUser(Integer id);
	/**
	 * 通过id修改用户信息
	 */
	/**
	 * 修改用户信息
	 */
	void updateUser(User user);
	/**
	 * 查询所有用户
	 */
	List<User> findAllUsers();
	/**
	 * 根据id查询用户
	 */
	User findUserById(int id);

	/**
	 * 根据用户名模糊查询用户
	 */
	List<User> findUsersByName(String username);
	/**
	 * 根据姓名和性别查询用户数据(姓名使用模糊查询)
	 */

	/**
	 * 根据用户名称模糊查询用户
	 */
}
}

1.4 UserMapper.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属性的作用:关联接口,需要配置对应接口的类全名字符串
-->
<mapper namespace="com.vg.dao.UserMapper">
  <!-- 完成接口映射配置文件UserMapper.xml的编写:这个映射文件就相当于UserMapper接口实现类配置 -->

  <!--select标签的作用:用来配置查询要执行的SQL语句
    id属性:关联接口中的方法名
    resultType属性:设置方法返回的数据类型,如果是集合则配置集合元素的类型
  -->
  <select id="findAllUsers" resultType="User">
    select * from user
  </select>

  <select id="findUserById" parameterType="int" resultType="User">
    select * from user where id = #{id};
  </select>

  <select id="findUsersByName" parameterType="string" resultType="User">
    select *from user where username like #{username}
  </select>

  <insert id="addUser" parameterType="user" >
    insert into user values(null,#{username},#{birthday},#{sex},#{address});
  </insert>

  <update id="updateUser" parameterType="user">
    update user set username = #{username},
    birthday = #{birthday},sex = #{sex}, address = #{address}
  where id = #{id}
  </update>

  <delete id="deleteUser" parameterType="integer">
    delete from user where id = #{id}
  </delete>
</mapper>

1.5 在主配置文件中加载接口映射文件

<mappers>
   <!--mapper标签:一个该标签就配置一个接口映射文件
      resource属性:配置映射文件的路径,路径分隔符使用 / : com/vg/dao/UserMapper.xml
      url:用于配置互联网上的映射文件的路径,比如:http://www.baidu.com/xxx.xml
    -->
    <!--<mapper resource="com/vg/dao/UserMapper.xml"></mapper>-->
    <package name="com.vg.dao"/>
</mappers>

1.6 测试类代码

package com.vg.test;

import com.vg.dao.UserMapper;
import com.vg.entity.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.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Date;
import java.util.List;

/**
 * 测试类
 */
public class TestUserMapper {
	private static SqlSessionFactory sqlSessionFactory =null;
	private SqlSession sqlSession =null;
	private UserMapper userMapper =null;

	// 该方法在所有测试方法执行之前执行1次
	@BeforeClass
	public static void init() throws Exception {
		// 1. 通过Resources类,加载sqlMapConfig.xml,得到文件输入流对
		InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
		// 2. 实例化会话工厂创建类SqlSessionFactoryBuilder对象
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		// 3. 根据字节输入流获取SqlSessionFactory对象
		sqlSessionFactory = builder.build(in);
	}
	// 该方法会在每个测试方法执行之前执行1次
	@Before
	public void before(){
		// 4. 获取SqlSession对象,等价连接对象
		// true:事务自动提交,false:不自动提交,默认值
		sqlSession = sqlSessionFactory.openSession();
		// 5. 创建接口 实现类对象
		userMapper = sqlSession.getMapper(UserMapper.class);

	}
	/**
	 * 测试方法:通过用户名模糊查询用户
	 */
	@Test
	public void testAddUser() throws Exception{
		// 1. 获得接口代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		// 2. 创建User对象
		User u = new User();
		u.setUsername("如来佛祖111");
		u.setBirthday(Date.valueOf("1980-01-20"));
		u.setAddress("西天灵山");
		u.setSex("男");
		// 3. 保存用户信息
		int row = userMapper.addUser(u);
		System.out.println("row = " + row);
		// 4. 手动提交事务
		sqlSession.commit();
	}
	/**
	 * 测试方法:通过用户名模糊查询用户
	 */
	@Test
	public void testFindUserByName() throws Exception{
		List<User> userList = userMapper.findUsersByName("%精%");
		for (User user : userList) {
			System.out.println(user);
		}
	}

	/**
	 * 测试方法:查询所有用户
	 */
	@Test
	public void testFindAllUsers() throws Exception{
		List<User> userList = userMapper.findAllUsers();
		for (User user : userList) {
			System.out.println(user);
		}
	}

	/**
	 * 根据id查询用户
	 * @throws Exception
	 */
	@Test
	public void testFindUserById()throws Exception{
		// 6. 调用接口的方法根据id查询用户
		User user = userMapper.findUserById(1);
		System.out.println("user = " + user);

	}
	@Test
	public void testUpdateUser()throws Exception{
		// 创建用户对象
		User user = new User(
				6,
				"牛魔王",
				Date.valueOf("1998-02-20"),
				"妖",
				"牛魔洞");
		// 更新用户
		userMapper.updateUser(user);

		// 提交事务
		sqlSession.commit();
	}
	@Test
	public void testDeleteUser()throws Exception{
		// 1. 获得接口代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		// 2. 根据id删除用户
		userMapper.deleteUser(6);
		// 3. 提交事务
		sqlSession.commit();
	}
	@After
	public void after() {
		// 7. 关闭会话,释放资源。

		sqlSession.close();
	}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot+Mybatis+Vue 实现商品模块的crud操作

    准备工作 第一步 创建新module,名字为10-springboot-goods-vue. 第二步 添加maven依赖并进行初步配置(拷贝即可) 第三步 拷贝pojo,dao,service包中的所有接口和类. 第四步 拷贝静态资源到static目录(例如vue.js,axios.min.js) 商品查询设计及实现 创建GoodsController并定义相关方法,代码如下: package com.cy.pj.goods.controller; import com.cy.pj.goods.

  • MyBatis Plus配置日志CRUD的使用详解

    配置日志 我们所有的sql在mybatisplus是不可见的,所以在开发中需要配置日志,开发完成后,就可以取消日志了,因为日志也是损耗资源的 #配置日志 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #仅控制台输出的日志 配置完日志后,后面的学习就需要注意自动生成的SQL,相信你们会喜欢上MybatisPlus CRUD使用 Insert插入 //测试插入 @Test publ

  • SpringBoot整合Mybatis实现CRUD

    准备工具:IDEA jdk1.8 Navicat for MySQL Postman 一.新建Project 选择依赖:mybatis Web Mysql JDBC 项目结构 pom依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o

  • Mybatis实现增删改查(CRUD)实例代码

    MyBatis简介 MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索.MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. MyBatis下载:https://github.com/mybatis/mybatis-3/releases Mybatis实

  • MyBatis学习教程(二)—如何使用MyBatis对users表执行CRUD操作

    上一篇文章MyBatis入门学习教程(一)-MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对users表执行CRUD操作.在没奔主题之前,先给大家补充点有关mybatis和crud的基本知识. 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索.MyBa

  • MybatisPlus,无XML分分钟实现CRUD操作

    不讲太多理论知识,官网都有,直接上手. 1.测试表 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) UNSIGNED NOT NULL, `name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户名', `password` varchar(18) CHARACTER SET utf8 COLLA

  • Spring boot整合Mybatis实现级联一对多CRUD操作的完整步骤

    前言 在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能.关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Mybatis并完成CRUD操作,这是本文操作的基础.本文先准备一个测试的数据库,然后使用MyBatis Generator进行部分代码自动生成,再以一个例子来展示稍微高级点的操作:使用Mybatis完成级联一对多的CRUD操作. 数据库准备 数据库用到三张表:user表,role表,user_ro

  • 详解springboot+mybatis-plue实现内置的CRUD使用详情

    mybatis-plus的特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作 强大的 CRUD操作:内置通用 Mapper.通用Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 支持 Lambda形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错 支持主键自动生成:支持多达 4种主键策略(内含分布式唯一 ID 生成器

  • 基于Mybatis实现CRUD操作过程解析(xml方式)

    1.环境搭建 1.1 表结构 create table user ( id int primary key auto_increment, username varchar(20) not null, birthday date, sex char(1) default '男', address varchar(50) ); insert into user values (null, '孙悟空','1980-10-24','男','花果山水帘洞'); insert into user valu

  • Android基于Pull方式解析xml的方法详解

    本文实例讲述了Android基于Pull方式解析xml的方法.分享给大家供大家参考,具体如下: Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull. Pull解析和Sax解析不一样的地方有: (1)pull读取xml文件后触发相应的事件调用方法返回的是数字 (2)pull可以在程序中控制想解析到哪里就可以停止解析. 来看看实例: book.xml如下: <?xml version="1.0"

  • Spring-IOC容器-Bean管理-基于XML方式超详解

    目录 Spring-IOC容器-Bean管理-基于XML方式 Spring框架概述 IOC概念和原理 IOC 操作 Bean 管理(set方式注入&&使用有参构造进行注入) IOC 操作 Bean 管理(xml注入其他类型属性) IOC 操作 Bean 管理(xml注入集合属性) IOC 操作 Bean 管理(FactoryBean) IOC 操作 Bean 管理(bean 作用域) IOC 操作 Bean 管理(bean 生命周期) IOC 操作 Bean 管理(XML自动装配) IOC

  • spring IOC容器管理必须知道的一些操作(基于XML方式)

    目录 一.IOC容器 ​1.什么是IOC(控制反转) ​2.IOC底层 ​3.Spring提供的IOC容器实现的两种方式(两个接口) ​4.ApplicationContext接口的实现类(具体根据API文档查看) 二.IOC容器-Bean管理 ​1.IOC操作Bean管理 ​2.基于XML配置文件创建对象 ​3.基于XML方式注入属性(DI:依赖注入(注入属性)) ​4.注入空值和特殊符号 ​5.注入属性-外部bean ​6.基于XML方式注入内部bean和级联赋值 ​7.IOC操作Bean管

  • java解析XML几种方式小结

    java解析XML几种方式小结 第一种:DOM. DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作.通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制. DOM接口提供了一种通过分层对象模型来访问XML文档信息的方式,这些分层对象模型依

  • PHP基于SimpleXML生成和解析xml的方法示例

    本文实例讲述了PHP基于SimpleXML生成和解析xml的方法.分享给大家供大家参考,具体如下: xml就不多解释了,php也提供了操作xml的方法,php操作xml可以有多种方式如domdocment,simplexml,xmlwriter等其中最简单的应该是simplexml了,这次就来说说simplexml怎么读取和解析xml文件或字符串 1. 生成xml字符串和文件 <?php header("Content-type: text/html; charset=utf-8"

  • Android编程解析XML文件的方法详解【基于XmlPullParser】

    本文实例讲述了Android编程解析XML文件的方法.分享给大家供大家参考,具体如下: 前言 在学习Android的Framework层源码时,Android大量的使用XmlPullParser来解析xml文件的源码.因此,这里也顺道介绍一下XmlPullParser的使用. XML XML(eXtensible Markup Language)中文名为可扩展标记语言.标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等. 用途 XML设计用了传送及携带数据信息,

  • 深入解读Python解析XML的几种方式

    在XML解析方面,Python贯彻了自己"开箱即用"(batteries included)的原则.在自带的标准库中,Python提供了大量可以用于处理XML语言的包和工具,数量之多,甚至让Python编程新手无从选择. 本文将介绍深入解读利用Python语言解析XML文件的几种方式,并以笔者推荐使用的ElementTree模块为例,演示具体使用方法和场景.文中所使用的Python版本为2.7. 一.什么是XML? XML是可扩展标记语言(Extensible Markup Langu

  • Android解析XML的三种方式SAX、Pull、Dom

    在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),本文对android解析xml的这三种方式进行一次总结. 今天解析的xml示例(channels.xml)如下: <?xml version="1.0" encoding="utf-8"?> <channel> <item id=&quo

  • 基于MyBatis XML配置方法(全面了解)

    MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息. 文档的顶层结构如下: configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 transactionManager 事务管理器 dataSourc

随机推荐