用MyBatis进行数据库的增删改查
前提是MyBatis环境部署好了,参考地址:
https://www.cnblogs.com/package-java/p/10316536.html
为了方便演示,我提前在数据库插入了数据方便查询
1. 创建新的数据库`tedu_ums`;
CREATE DATABASE tedu_ums;
2. 在新数据库中创建数据表`t_user`,表中至少包含id, username, password, age, phone, email这6个属性;
USE tedu_ums;
CREATE TABLE t_user (
id INT AUTO_INCREMENT,
username VARCHAR(20) UNIQUE NOT NULL,
password VARCHAR(20) NOT NULL,
age INT,
phone VARCHAR(20),
email VARCHAR(50),
PRIMARY KEY(id)
) DEFAULT CHARSET=utf8;
3. 添加不少于10条数据;
INSERT INTO t_user
(username, password, age, phone, email)
VALUES
('root', '1234', 18, '13800138001', 'root@tedu.cn'),
('admin', '4567', 19, '13800138002', 'admin@tedu.cn'),
('jack', '1234', 20, '13800138003', 'jack@tedu.cn'),
('tom', '1234', 22, '13800138010', 'tom@tedu.cn'),
('jerry', '1234', 25, '13800138011', 'jerry@tedu.cn'),
('rose', '1234', 21, '13800138004', 'rose@tedu.cn'),
('mike', '1234', 22, '13800138005', 'mike@tedu.cn'),
('lily', '1234', 23, '13800138006', 'lily@tedu.cn'),
('lucy', '1234', 24, '13800138007', 'lucy@tedu.cn'),
('mary', '1234', 25, '13800138008', 'mary@tedu.cn'),
('alex', '1234', 26, '13800138009', 'alex@tedu.cn');
4. 查询所有数据;
SELECT id,username,password,age,phone,email FROM t_user;
一、创建实体类
每张数据表都应该有1个对应的实体类,所以,创建`cn.tedu.mybatis.entity.User`类,属性的数量与类型请参考数据表的设计:
package cn.tedu.mybatis.entity;
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String phone;
private String email;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + ", age=" + age + ", phone="
+ phone + ", email=" + email + "]";
}
}
二、创建接口,声明抽象方法
创建`cn.tedu.mybatis.mapper.UserMapper`接口,并在接口中声明“插入用户数据”的抽象方法:
package cn.tedu.mybatis.mapper;
import cn.tedu.mybatis.entity.User;
public interface UserMapper {
Integer addnew(User user);//增
User findById(Integer id);//查
Integer updatenew(User user);//改
Integer deletenew(Integer id);//删
}
关于抽象方法,在MyBatis中,执行的操作如果是增、删、改,返回值均使用`Integer`,表示受影响的行数;方法的名称可以自定义,只要不违反Java的命名规则即可,另外,不允许在接口中使用重载机制;参数也可以自定义,如果执行的是增加操作,参数应该是与数据表对应的实体类的类型。
三、配置接口所在的包并配置配置XML文件的位置与数据源
1、在MyBatis中,通过`MapperScannerConfigurer`类扫描持久层接口的,所以,应该在`spring-dao.xml`文件中进行配置:
2、MyBatis通过`SqlSessionFactoryBean`获取数据源,并且扫描配置了SQL语句的XML文件,最终由MyBatis框架来执行SQL语句,所以,需要在`spring-dao.xml`中配置`SqlSessionFactoryBean`:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<!-- 加载数据库的配置文件 -->
<util:properties id="dbConfig" location="classpath:db.properties"></util:properties>
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="url" value="#{dbConfig.url}"></property>
<property name="driverClassName" value="#{dbConfig.driver}"></property>
<property name="username" value="#{dbConfig.username}"></property>
<property name="password" value="#{dbConfig.password}"></property>
<property name="initialSize" value="#{dbConfig.initialSize}"></property>
<property name="maxActive" value="#{dbConfig.maxActive}"></property>
</bean>
<!-- 扫描持久层接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置接口文件所在的包 -->
<property name="basePackage" value="cn.tedu.mybatis.mapper"></property>
</bean>
<!-- 或取数据源 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mapperLocations" value="classpath:mappers/*.xml"></property>
</bean> </beans>
四、在XML中配置接口方法对应的SQL语句
在`src/main/resources`下创建名为`mappers`文件夹,创建名为UserMapper.xml的文件
根节点必须是`<mapper>`,且根节点的`namespace`表示对应的接口文件,然后,添加子节点,以对应接口中的抽象方法:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<!-- 根节点必须是mapper -->
<!-- namespace对应的接口文件 -->
<mapper namespace="cn.tedu.mybatis.mapper.UserMapper">
<!-- 根据执行的操作类型选择节点 -->
<!-- id:对应的抽象方法的方法名 -->
<!-- 值:#{}括号里面的是User的属性名 -->
<insert id="addnew">
INSERT INTO t_user(
username,password,age,phone,email
) value(
#{username},#{password},#{age},#{phone},#{email}
)
</insert>
<select id="findById" resultType="cn.tedu.mybatis.entity.User">
SELECT id,username,password,age,phone,email FROM t_user WHERE id=#{id}
</select>
<insert id="addnewone">
INSERT INTO t_user(
username,password,age,phone,email
) value(
#{username},#{password},#{age},#{phone},#{email}
)
</insert>
<update id="updatenew">
UPDATE t_user SET
username=#{username},
password=#{password},
age = #{age},
phone = #{phone},
email=#{email}
WHERE
id=#{id}
</update>
<delete id="deletenew">
DELETE FROM t_user WHERE age=#{age}
</delete>
</mapper>
五、在测试类中测试
package web; import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.tedu.mybatis.entity.User;
import cn.tedu.mybatis.mapper.UserMapper; public class TestDemo01 {
AbstractApplicationContext ac;
UserMapper mapper;
@Before
public void doBefore() {
ac = new ClassPathXmlApplicationContext("spring-dao.xml");
mapper = ac.getBean("userMapper",UserMapper.class);//根据id或取对象
}
@After
public void doafter() {
ac.close();
}
/* 测试插入*/
@Test
public void add() {
User user = new User();
user.setUsername("学海无崖");
user.setPassword("12345600");
Integer row = mapper.addnew(user);
System.out.println("row:"+row);
}
/* 测试查询*/
@Test
public void findById() {
Integer id=8;
User user = mapper.findById(id);
System.out.println(user);
}
/* 测试修改*/
@Test
public void updatenew() {
User user = new User();
user.setUsername("小珠佩琦");
user.setPassword("5548");
user.setAge(18);
user.setEmail("44@qq.com");
user.setPhone("448484");
user.setId(6);
Integer num = mapper.updatenew(user);
System.out.println("num:"+num);
}
/* 测试删除*/
@Test
public void deletenew() {
Integer age = 60;
Integer row = mapper.deletenew(age);
System.out.println("row:"+row);
} }
用MyBatis进行数据库的增删改查的更多相关文章
- MyBatis对数据库的增删改查操作,简单演示样例
之前一直有用Hibernate进行开发.近期公司在使用Mybatis.依据网上的演示样例,做了一个简单的Demo,以便日后复习 使用XMl方式映射sql语句 整体结构例如以下图 watermark/2 ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
- ThinkPHP实现对数据库的增删改查
好久都没有更新博客了,之前老师布置的任务总算是现在可以说告一段落了,今天趁老师还没提出其他要求来更新一篇博客. 今天我想记录的是我之前做项目,自己所理解的ThinkPHP对数据库的增删改查. 首先要说 ...
- Android学习---数据库的增删改查(sqlite CRUD)
上一篇文章介绍了sqlite数据库的创建,以及数据的访问,本文将主要介绍数据库的增删改查. 下面直接看代码: MyDBHelper.java(创建数据库,添加一列phone) package com. ...
- Android 系统API实现数据库的增删改查和SQLite3工具的使用
在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...
- Android SQL语句实现数据库的增删改查
本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...
- 【转载】通过JDBC对MySQL数据库的增删改查
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
随机推荐
- 2015 Objective-C 新特性
Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然 ...
- k8s集群启动了上万个容器(一个pod里放上百个容器,起百个pod就模拟出上万个容器)服务器超时,无法操作的解决办法
问题说明: 一个POD里放了百个容器,然后让K8S集群部署上百个POD,得到可运行上万个容器的实验目的. 实验环境:3台DELL裸机服务器,16核+64G,硬盘容量忽略吧,上T了,肯定够. 1.一开始 ...
- Jquery复习总结
1.选择器: $(".class") $("#id") $("div") $("a p") $(div:first).c ...
- NOI 2018 归程 (Kruskal重构树)
题目大意:太长了,略 Kruskal重构树,很神奇的一个算法吧 如果两个并查集被某种条件合并,那么这个条件作为一个新的节点连接两个并查集 那么在接下来的提问中,如果某个点合法,它的所有子节点也都合法, ...
- 小学生绞尽脑汁也学不会的python(面对对象-----成员)
小学生绞尽脑汁也学不会的python(面对对象-----成员) 成员 class Person: def __init__(self, name, num, gender, birthday): # ...
- VUE:渐进式JavaScript框架(小白自学)
VUE:渐进式JavaScript框架 一.官网 英文 https://vuejs.org/ 中文 https://cn.vuejs.org/ 二:渐进式 即有一个核心库,在需要的时候再逐渐添加插件的 ...
- JavaScript实现html页面转换成图片格式
本文提供三个JavaScript插件,并提供对应GitHub地址,自行查看使用方法: 1)dom-to-image:dom-to-image 2)html2canvas:html2canvas 3)r ...
- 【codeforces 229C】Triangles
[题目链接]:http://codeforces.com/problemset/problem/229/C [题意] 给你一张完全图; 然后1个人从中选择m条边; 然后另外一个人从中选择剩余的n*(n ...
- angular-HTML DOM
ng-disabled用法 <div ng-app="" ng-init="mySwitch=true"> <p> <button ...
- HDU 4331 Contest 4
一个很直观的想法是,求出每个点上下左右能到达的最大长度.然后枚举其斜边...没想到过了.... 当然,题解有一个很巧妙的优化,利用树状数组,那个太巧妙了. #include<iostream&g ...