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 ...
随机推荐
- 多任务-python实现-死锁,银行家算法(2.1.5)
@ 目录 1.死锁 2.避免死锁的方式-银行家算法 1.死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系 ...
- Nessus<强大的漏扫工具>
刷漏洞,抓鸡必备,,,,,,, 参考文章: https://blog.csdn.net/wwl012345/article/details/96998187 肝,,,,太全了,,, ps : 我不是脚 ...
- Vue必须必须要注意的几个细节
1.每次执行完,尽量npm run dev 一次,有时候又缓存问题 2.安装sass 一.使用save会在package.json中自动添加.因为sass-loader依赖于node-sass npm ...
- kubernetes环境搭建 -k8s笔记(一)
一.环境准备 1.硬件及版本信息: cpu&内存:2核心,2G 网络: 每台vm主机2块网卡,一块NAT用于上网,别一块配置成 "仅主机模式",网段为192.168.100 ...
- 超详细的第一个Servlet程序
Servlet的第一个程序! 首先查看官方文档,来编写我们的第一段代码 1.先启动Tomcat,确保我们能够正常访问. 2.http://localhost:8080/examples/ 查看 ...
- grpc系列- protobuf详解
Protocol Buffers 是一种与语言.平台无关,可扩展的序列化结构化数据的方法,常用于通信协议,数据存储等等.相较于 JSON.XML,它更小.更快.更简单,因此也更受开发人员的青眯. 基本 ...
- Oracel 修改字段类型(有数据的情况)
1 /*修改原字段名bh为bh_tmp*/ 2 alter table Tab_Name rename column bh to bh_tmp; 3 /*增加一个和原字段名同名的字段bh*/ 4 al ...
- Ubuntu+KVM显卡透传
好久没有更新微博了,最近有点忙,大家见谅啊!今天带来的是我前段时间做的东西,也就是在 Ubuntu下做KVM虚拟机显科透传.(最近人有点懒,其实有几次是有时间更新的,但是就是懒得动,唉!得保持清醒不能 ...
- mysql数据库的连接以及增删改查Java代码实现(转载)
每天叫醒自己的不是闹钟,而是梦想 数据库: create table t1(id int primary key not null auto_increment,name varchar(32),pa ...
- python实现贴吧顶贴机器人
前言------百度贴吧流量如何?全球最大的中文社区,虽然比不上阿里,腾讯! 此文章仅供交流学习.建议机器人用小号操作,切勿用作商业用途! 测试版本:python 3.7 64位火狐浏览器firefo ...