Mybatis入门Demo(单表的增删改查)
1.Mybatis
- 什么是Mybatis:
- mybatis是一个持久层框架,用java编写的
- 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动、创建连接等繁杂过程
- 它使用了ORM思想实现了结果集的封装
2. 入门Demo(假设对users表进行操作)
Mybatis的环境搭建
第一步:创建Java工程并导入mybatis-3.2.2.jar和mysql-connector-java-5.1.47.jar两个jar包到本工程下的lib包中,然后buli path
第二步:创建实体类和dao的接口(本工程下的src文件夹下的com.alibaba.wlq.bean包下以及com.alibaba.wlq.dao包下)
注意1:在创建实体类的时候如果重写了构造方法那么一定要加上无参的构造方法,否则会出错
注意2:在创建实体类的时候属性名要和表中的字段名相匹配
注意3:要生成set、get方法,也可以重写tostring方法,方便输出
package com.alibaba.wlq.bean;
public class Users {
private int id;
private String name;
private int age;
private String sex;
public int getId() {
return id;
}
public void setId(int 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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Users(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public Users() {
super();
}
@Override
public String toString() {
return "Users [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
public Users(int id, String name, int age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
}
package com.alibaba.wlq.dao; import java.util.List; import com.alibaba.wlq.bean.Users;
//是个接口相当于之前jdbc时的实现类,里面写方法的
public interface UsersMapper {
//查询users表中所有的记录
List<Users> selectAll();
/**
* 增加用户
*/
void addUser(Users user);
/**
* 根据id删除记录
* @param id
*/
void deleteById(int id);
/**
* 根据id修改用户信息
* @param user
*/
void updateById(Users user);
}
第三步:创建Mybatis的主配置文件(本工程下的resources文件夹下)
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="development">
<!-- 配置mysql的环境 -->
<environment id="development">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC" />
<!-- 配置数据源连接池 -->
<dataSource type="POOLED">
<!-- 配置连接数据库的四个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件是指每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/alibaba/wlq/mapper/UsersMapper.xml" />
</mappers>
</configuration>
第四步:创建映射配置文件(本工程下的resources文件夹下的com.alibaba.wlq.mapper包下)
- 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="com.alibaba.wlq.dao.UsersMapper">
<!-- 这是查询users表中所有记录的sql语句,resultType属性是返回值类型,因为我们查询所有的方法肯定不止
一条数据,每一条数据就是一个对象,所以返回值类型是实体类,然后mybatis会帮我们封装进list集合中 -->
<select id="selectAll" resultType="com.alibaba.wlq.bean.Users">
select * from users
</select>
<insert id="addUser" parameterType="com.alibaba.wlq.bean.Users">
insert into users(name,age,sex) values(#{name},#{age},#{sex})
</insert>
<delete id="deleteById" parameterType="int">
delete from users where id = #{id}
</delete>
<update id="updateById" parameterType="com.alibaba.wlq.bean.Users">
update users set name = #{name},age = #{age},sex = #{sex} where id = #{id}
</update>
</mapper>
测试
import static org.junit.jupiter.api.Assertions.*; import java.io.Reader;
import java.util.List; 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.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test; import com.alibaba.wlq.bean.Users;
import com.alibaba.wlq.dao.UsersMapper; class test {
static SqlSession session = null;
static UsersMapper usersmapper;
@BeforeAll
static void setUpBeforeClass() throws Exception {
//读取配置文件
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
//创建SqlSessionFactory工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
//使用工厂生产SqlSession对象
session = factory.openSession();
//使用SqlSession创建Dao接口的代理对象
usersmapper = session.getMapper(UsersMapper.class);
} @AfterAll
static void tearDownAfterClass() throws Exception {
//向数据库提交
session.commit();
} @Test
void test1() {
//使用代理对象执行方法
//查询所有记录并输出
List<Users> list = usersmapper.selectAll();
System.out.println(list);
}
@Test
void test2() {
//使用代理对象执行方法
//增加用户
usersmapper.addUser(new Users("xxx",18,"男"));
}
@Test
void test3() {
/**
* 删除id为10的用户
*/
usersmapper.deleteById(10);
}
@Test
void test4() {
/**
* 根据用户id修改用户信息
*/
usersmapper.updateById(new Users(5,"杨幂",18,"女"));
}
}
Mybatis入门Demo(单表的增删改查)的更多相关文章
- python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)
day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...
- hibernate对单表的增删改查
ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 实现对单表的增删改查 向区域表中增加数据: 第一步: 新建一个Da ...
- Django学习笔记(10)——Book单表的增删改查页面
一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...
- django模型层 关于单表的增删改查
关于ORM MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...
- Mybatis(一)实现单表的增删改查
1.1 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...
- 1.SSM整合_单表的增删改查
目标:增删改查 环境:Maven+Eclipse+Tomcat7+JDK7 思维导图: 表结构 目录结构 依赖 <dependencies> <dependency> < ...
- Django学习笔记--数据库中的单表操作----增删改查
1.Django数据库中的增删改查 1.添加表和字段 # 创建的表的名字为app的名称拼接类名 class User(models.Model): # id字段 自增 是主键 id = models. ...
- django 利用ORM对单表进行增删改查
牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...
- Django中对单表的增删改查
之前的简单预习,重点在后面 方式一: # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象 book_obj=Book.objects.creat ...
随机推荐
- js下 Day04、DOM操作--自定义属性
语法: 元素.getAttribute('自定义属性名') 功能:获取自定义属性 语法: 元素.setAttribute('自定义属性名','值') 功能:设置自定义属性 语法: 元素.removeA ...
- Zepto入门
Zepto 的介绍 #什么是 Zepto zepto是轻量级的JavaScript库,专门为移动端定制的框架. 与jquery有着类似的API,俗称:会jquery就会用zepto #zepto的特点 ...
- Offer经验分享 - 蚂蚁金服、字节跳动、PDD、百度、华为、Paypal - Java社招面经
年中的时候因为换工作的缘故,陆续参加了华为.蚂蚁.字节跳动.PDD.百度.Paypal的社招面试,除了字节跳动流程较长,我主动结束面试以外,其他的都顺利拿到了Offer. 最近时间稍微宽裕点了,写个面 ...
- python归并排序
由于某人问我要个归并排序,就凑合写了一个,AA = raw_input().split(' ') A = []; for num in AA: A.append(int(num)) def Merge ...
- Redis 6.0 多线程性能测试结果及分析
单线程的Redis一向以简洁高效著称,但也有其阿喀琉斯之踵:阻塞!单个线程在最容易产生瓶颈的网络读写(Redis大key)请求完成之前,其他所有请求都将会被阻塞,严重影响其效率,因此Redis的多 ...
- Sentinel入门学习记录
最近公司里面在进行微服务开发,因为有使用到限流降级,所以去调研学习了一下Sentinel,在这里做一个记录. Sentinel官方文档:https://github.com/alibaba/Senti ...
- Could not open ServletContext resource [/WEB-INF/applicationContext.xml] 解决办法
Spring官方文档中规定,如果在上下文中没有指定contextConfigLoction配置文件的位置,则会默认去WEB-INF中去寻找对应的配置文件. 理论上classpath的默认路径是WEB- ...
- web项目报错 无法解析,丢失包 是缺少本地运行jre
1.通过build path 添加add Library 2.添加jre
- 基于数据库、redis和zookeeper实现的分布式锁
基于数据库 基于数据库(MySQL)的方案,一般分为3类:基于表记录.乐观锁和悲观锁 基于表记录 用表主键或表字段加唯一性索引便可实现,如下: CREATE TABLE `database_lock` ...
- ES快速开发,ElasticsearchRestTemplate基本使用以及ELK快速部署
最近博主有一些elasticsearch的工作,所以更新的慢了些,现在就教大家快速入门,并对一些基本的查询.更新需求做一下示例,废话不多说开始: 1. ES快速上手 es下载:[https://ela ...