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 ...
随机推荐
- Cookie注入新方法
正常输 and 1=1 会有waf 进行拦截 判断一个网站是否支持cookie注入_> 现在是get ,你可以把参数放在post里面试试看看是否返回正常 用hackbar插件也 ...
- 持久层之 MyBatis: 第三篇 :缓存 And 高级查询
MyBatis入门到精通3 缓存机制 Mybatis一级缓存测试 Mybatis二级缓存测试 高级查询 表关系说明 一对一查询 一对多查询 多对多查询 缓存机制 正如大多数持久层框架一样,MyBati ...
- win10开启运行下显示历史操作记录
步骤 设置,隐私,常规,允许windows跟踪应用启动,以改进开始和搜索结果
- 【Windows系统常用命令集合】
查看建立的TCP连接:netstat -n 查看建立的TCP连接的进程:netstat -nb 查看本机侦听的端口: netstat -an (说明:如果端口没有侦听 检查服务) 测试到远程计算机的某 ...
- GDI+中发生一般性错误 Winform Image.Save(mstream, ImageFormat.Png)引发
在处理图片时,读取本地图像文件,进行另存时发生GDI+中发生一般性错误 . 具体情况如下: 用OpenFileDialog打开图像文件,文件名为filename StreamReader sr = n ...
- CSS系列 (03):CSS三大特性
层叠性 层叠性指的是样式的优先级,当产生冲突时以优先级高的为准,优先级相同时取后面定义的属性样式. 继承性 继承性指的是子孙元素可以继承父元素的属性. 记录一下开发中常用的继承属性: 字体系列 fon ...
- List集合转JSONObject
以前写代码喜欢用Map拼接返回去给前端,这样得到的也是一个标准的JSON,今天先不说Map的优缺点,我们就来说说JSONObject的使用,我用的是阿里的fastjson,先上代码,当我们需要嵌套代码 ...
- spring传播机制注意点
在同一个类里面spring的传播机制是不起作用的比如说在执行saveA方法的时候调用C方法插入C设置的传播属性是不使用事物 但是执行的效果是saveA方法抛出异常后导致C的记录回滚了也就是说明C方法设 ...
- python使用smtplib和email库发送邮件
国内很多服务器提供商都默认禁止了smtp默认的25端口服务,而启用465端口发送邮件 在smtplib库中直接调用SMTP_SSL就是默认使用465端口 示例代码如下: def send_eamil( ...
- [leetcode]720. Longest Word in Dictionary字典中最长的单词
b.compareTo(a) 这个函数是比较两个值得大小,如果b比a大,那么返回1 如果小,那么返回-1,相等返回0 如果比较的是字符串,那么比较字典编纂顺序,b靠前返回-1,靠后返回1 这个题的核心 ...