Mybatis实例增删改查(二)
创建实体类:
package com.test.mybatis.bean; public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email="
+ email + ", gender=" + gender + "]";
} }
mybatis-config.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>
<!--
1、mybatis可以使用properties来引入外部配置文件的内容
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
-->
<properties resource="jdbcconf.properties">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</properties>
<!--
2、settings包含很多的设置项
setting:用来设置每一个设置项
name:设置项名
value:设置项取值
-->
<settings>
<!--
驼峰命名规则:当数据库名与实体类名发生不一致时,驼峰命名则会发挥作用
如:
数据库字段:id stuname
实体类属性:id stuName
-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--
3、typeAliases:别名处理器,可以为Java类型起别名
别名不区分大小写
-->
<typeAliases>
<!--
type:指定要起别名的类型全类名;默认别名就是类名小写:
alias:指定新的别名
-->
<!-- <typeAlias type="com.test.mybatis.Employee" alias="emp"/> -->
<!--
package:为某个包下的所有类批量起别名
也可在具体的实体类中使用@Alias注解为某个类型指定新的别名
-->
<package name="com.test.mybatis.bean"/>
</typeAliases>
<!-- 4、environments:配置环境,可配置多种环境(development,test)
environment:配置一个具体的环境信息,必须有两个标签;
id:代表当前环境的唯一标识
transactionManager:事务管理器
type:事务管理器的类型;JDBC\MANAGED
自定义事务管理:实现TransactionFactory接口,type指定为全类名
DataSource: 数据源
type: 数据源类型
UNPOOLED(UnpooledDataSourceFactory)
POOLED(PooledDataSourceFactory)
JNDI(JndiDataSourceFactory)
-->
<environments default="development">
<environment id="development">
<!-- 事务类型 -->
<transactionManager type="JDBC"/>
<!-- 数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments> <!--
5、databaseIdProvider:支持多数据库厂商
type="DB_VENDOR"
作用就是得到数据库厂商标识,mybatis就能根据不同的数据库厂商标识,执行不同的SQL语句
MySQL Oracle SQL Server
-->
<databaseIdProvider type="DB_VENDOR">
<!-- 为不同数据库厂商起别名 -->
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到 mybatis-config.xml中-->
<!-- 6、mappers:将sql映射注册到全局配置中 -->
<mappers>
<!--
`mapper:注册一个sql映射
注册配置文件
resource:引用类路径下的sql映射文件
url:引用网络路径或者磁盘路径下的sql映射文件
class:引用(注册)接口
1、必须有sql映射文件,映射文件名必须和接口同名,切放在与接口同一个目录下
2、没有sql映射,所有sql都是利用注解写在接口上(@Select() @Insert() @Update @Delete)
-->
<mapper resource="EmployeeMapper.xml"/>
<!-- <mapper class="com.test.mybatis.dao.EmployeeMapper.xml"/> -->
<!--
批量注册 :映射文件名必须和接口同名,且在同一个包下
-->
<!-- <package name="com.test.mybatis.dao"/> -->
</mappers> </configuration>
数据库信息的配置:
jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root
创建接口:
package com.test.mybatis.dao; import com.test.mybatis.bean.Employee; public interface EmployeeMapper { public Employee getEmpById(Integer id); public boolean addEmployee(Employee employee); public boolean modifyEmployee(Employee employee); public boolean removeEmployee(Integer id); }
实现接口:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mtbatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mybatis.dao.EmployeeMapper">
<!--
namespace:名称空间 指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中去吃id值
databaseId:标识数据库执行环境
--> <!--
若此两种方法同时存在,则会默认使用带有数据库厂商标识的方法
若存在三种方法,则默认加载当前数据库环境下的带有厂商标识的方法和未带标识的方法
-->
<select id="getEmpById" resultType="employee">
select * from tbl_employee where id=#{id}
</select>
<select id="getEmpById" resultType="employee"
databaseId="mysql">
select * from tbl_employee where id=#{id}
</select>
<insert id="addEmployee" parameterType="employee">
insert into tbl_employee(email,last_name,gender) values(#{email},#{lastName},#{gender}) </insert>
<update id="modifyEmployee">
update tbl_employee
set
email=#{email},
last_name=#{lastName},
gender=#{gender}
where
id=#{id}
</update>
<delete id="removeEmployee">
delete from tbl_employee where id=#{id}
</delete>
</mapper>
测试:
package com.test.mybatis.test; import java.io.IOException;
import java.io.InputStream; 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.Test; import com.test.mybatis.dao.EmployeeMapper; public class MyBatisTest {
//读取配置文件,得到SQLSessionFactory
public SqlSessionFactory getSqlSessionFactory() throws IOException{
String resource="mybatis-config.xml";
InputStream is=Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(is);
}
@Test
public void test01() throws IOException{
//获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//获取sqlSession
//代表和数据库的一次对话,用完必须关闭,相当于connection,都是非线程安全。每次使用都应该获取新的对象
SqlSession openSession = sqlSessionFactory.openSession();
try{
//获取接口的实现类对象
//会为接口自动的创建一个代理对象,代理对象去执行增删查改方法
//mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象
//(将接口和xml进行绑定)
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
//查询操作
// Employee emp = mapper.getEmpById(1); //添加操作
// Employee employee=new Employee();
// employee.setEmail("6789@test.com");
// employee.setGender("2");
// employee.setLastName("test01");
// boolean flag = mapper.addEmployee(employee); //修改操作
// Employee emp=new Employee();
// emp.setLastName("tommer");
// emp.setId(6);
// boolean flag = mapper.modifyEmployee(emp); //删除操作,mybatis会根据所执行结果的影响行数,或者记录数,去确定返回值是否为true(影响行数或记录数>=1)\false(影响行数或记录数<1)
Boolean flag= mapper.removeEmployee(3); //增删改查完成后一定要手动提交
openSession.commit();
System.out.println(flag);
}finally{
openSession.close();
}
} }
Mybatis实例增删改查(二)的更多相关文章
- 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作
一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...
- MyBatis批量增删改查操作
前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作.前文地址:http://blog.csdn.net/mahoking/article/details/43673741 ...
- 从0开始完成SpringBoot+Mybatis实现增删改查
1.准备知识: 1)需要掌握的知识: Java基础,JavaWeb开发基础,Spring基础(没有Spring的基础也可以,接触过Spring最好),ajax,Jquery,Mybatis. 2)项目 ...
- Spring Boot入门系列(六)如何整合Mybatis实现增删改查
前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...
- ssm 框架实现增删改查CRUD操作(Spring + SpringMVC + Mybatis 实现增删改查)
ssm 框架实现增删改查 SpringBoot 项目整合 一.项目准备 1.1 ssm 框架环境搭建 1.2 项目结构图如下 1.3 数据表结构图如下 1.4 运行结果 二.项目实现 1. Emplo ...
- MyBatis的增删改查。
数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改,并且对程序接口做了一些调整,以及对一些问题进行了解答. 1.调整后的结构图: 2.连接数据库文件配置分离: 一般的程序都会把连 ...
- 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。
1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查
使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...
随机推荐
- 利用mybatis的Generator的插件生成代码
1 在resources文件夹下创建generatorConfig.xml文件来做相关配置 <?xml version="1.0" encoding="UTF-8& ...
- 当你的系统依赖于某个bug...
标题粗略看是有点违反常识的,bug通常是指某些代码存在问题导致系统没有按照期望方式工作,应该是需要尽可能被修复的,这样系统才会正常工作.但是,开发实践中会发现在某些情况下,本来功能没有问题,在你信心满 ...
- 如何为你的IDEA安装插件——几个实用插件推荐
文章目录 如何为你的IDEA安装插件--几个实用插件推荐 安装插件 插件推荐 1.Background Image Plus 2.Translation 3.CodeGlance 4.Rainbow ...
- try-catch-finally异常处理:
java中三种实现多态的方案: 一:父类:普通类,普通方法: 子类:普通类,普通方法: 二:父类:抽象类,抽象方法: 子类:普通类,重写父类的抽象方法: 三:父类:接口类,抽象方法: 子类:普通类,实 ...
- 题解 洛谷P3469
题目每个割点去掉后会导致多少对点不能连通 考虑跑Tarjan的时候记录每个儿子的size,那么去掉这个割点后其他的点都不能和这个儿子连通 注意每个点去掉后它本身就不能与其他所有点连通 还有就是题目里求 ...
- CompletableFuture异步线程
1.线程池七大参数介绍 (1)corePoolSize:线程池中常驻核心线程数 (2)maximumPoolSize:线程池能够容纳同时执行的最大线程数,此值必须大于等于1 (3)keepAliveT ...
- 基于OpenSIPS 实现分机注册服务服务器
呼叫中心平台中坐席是不可或缺的一环,而坐席打电话自然需要使用办公分机.通常情况下我们通过软交换平台FreeSWITCH.Asterisk即可搭建分机注册服务. 但单台FreeSWITCH或Asteri ...
- 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统 | 简单的分库分表设计
前言 项目涉及到了一些设计模式,如果你看的不是很明白,没有关系坚持下来,写完之后去思考去品,你就会有一种突拨开云雾的感觉,所以请不要在半途感觉自己看不懂选择放弃,如果我哪里写的详细,或者需要修正请联系 ...
- 第7章 Spark SQL 的运行原理(了解)
第7章 Spark SQL 的运行原理(了解) 7.1 Spark SQL运行架构 Spark SQL对SQL语句的处理和关系型数据库类似,即词法/语法解析.绑定.优化.执行.Spark SQL会先将 ...
- MySQL数据库下统计记录数小于指定数值的数据
楼主在做一个智慧工地的产品,需要对工人进行一些数据统计,比如要统计导入人员数量小于30的工地,SQL应该怎么写呢? 首先了解一下数据结构,工地分三张表,四级层级关系,Organization表存储区域 ...