MyBatis之CRUD
1 mybatis框架介绍
1.1回顾jdbc操作数据库的过程
1.2 mybatis开发步骤
A.提供一个SqlMapperConfig.xml(src目录下),该文件主要配置数据库连接,事务,二级缓存。
B.提供一个XxxMapper.xml(DeptMapper.xml),放入和DeptDao同一个包中。
Sql语句
Sql语句占位符的值
Sql语句执行后需要返回的结果类型
C.使用mybatis提供的API操作数据库。
Mybatis完成对jdbc的封装,将操作数据过程需要的参数,封装到xml文件中,做到了可变的参数和不可变的代码的之间的解耦合,提高数据库开的效率。
2 Mybatis对数据的CRUD
2.1新建项目加入jar包
2.2建立Mybatis的主配置文件
必须放入src目录(classpath)
MyBatis.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>
<properties resource="db.properties"></properties>
<environments default="deptEnv">
<environment id="deptEnv">
<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>
<mappers>
<mapper resource="org/guangsoft/mapper/DeptMapper.xml" />
</mappers>
</configuration>
db.properties
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/test
username = root
password =root
2.3建立部门的实体类
package org.guangsoft.entity; public class Dept
{
private Integer did;
private String dname;
public Integer getDid()
{
return did;
}
public void setDid(Integer did)
{
this.did = did;
}
public String getDname()
{
return dname;
}
public void setDname(String dname)
{
this.dname = dname;
} }
2.4建立DeptMapper接口
package org.guangsoft.mapper; import java.util.List; import org.guangsoft.entity.Dept; public interface DeptMapper
{
public void saveDept(Dept dept);
public void deleteDept(Integer did);
public void updateDept(Dept dept);
public Dept getDeptById(Integer did);
public List<Dept> getAllDepts();
public Integer getDeptCount();
}
2.5建立DeptMapperImpl实现类
使用Mybatis的API完成数据库添加
package org.guangsoft.mapper.impl; import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.guangsoft.entity.Dept;
import org.guangsoft.mapper.DeptMapper; public class DeptMapperImpl implements DeptMapper
{ @Override
public void saveDept(Dept dept)
{
//创建sqlSessionFactory对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(DeptMapperImpl.class.
getClassLoader().getResourceAsStream("MyBatis.xml"));
//产生SqlSesion兑现
SqlSession sqlSession = ssf.openSession();
//进行数据的crud操作
sqlSession.insert("dept.saveDept",dept);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
} @Override
public void deleteDept(Integer did)
{
//创建sqlSessionFactory对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(DeptMapperImpl.class.
getClassLoader().getResourceAsStream("MyBatis.xml"));
//产生SqlSesion兑现
SqlSession sqlSession = ssf.openSession();
//进行数据的crud操作
int rows = sqlSession.delete("dept.deleteDept",did);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
} @Override
public void updateDept(Dept dept)
{
//创建sqlSessionFactory对象
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(DeptMapperImpl.class.
getClassLoader().getResourceAsStream("MyBatis.xml"));
//产生SqlSesion兑现
SqlSession sqlSession = ssf.openSession();
//进行数据的crud操作
int rows = sqlSession.update("dept.updateDept",dept);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
} @Override
public Dept getDeptById(Integer did)
{
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(DeptMapperImpl.class.getClassLoader().getResourceAsStream("MyBatis.xml"));
//获取数据库会话
SqlSession session = ssf.openSession();
//进行数据库查询操作
Dept dept = session.selectOne("dept.getDeptById",did);
//释放资源
session.close();
return dept;
} @Override
public List<Dept> getAllDepts()
{
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(DeptMapperImpl.class.getClassLoader().getResourceAsStream("MyBatis.xml"));
//获取数据库会话
SqlSession session = ssf.openSession();
//进行数据库查询操作
List<Dept> deptList = session.selectList("dept.getAllDepts");
//释放资源
session.close();
return deptList;
} @Override
public Integer getDeptCount()
{
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
SqlSessionFactory ssf = ssfb.build(DeptMapperImpl.class.getClassLoader().getResourceAsStream("MyBatis.xml"));
//获取数据库会话
SqlSession session = ssf.openSession();
//进行数据库查询操作
int count = session.selectOne("dept.getDeptCount");
//释放资源
session.close();
return count;
} }
2.6建立映DeptMapper.xml射文件
和Mapper接口放入同一个包,而且和Mapper接口的名字一样。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dept">
<insert id="saveDept" parameterType="org.guangsoft.entity.Dept">
insert into dept(did,dname) values (null,#{dname})
<selectKey keyColumn="did" keyProperty="did" resultType="java.lang.Integer">
<!-- 获得增加的记录的id -->
select last_insert_id()
</selectKey>
</insert>
<delete id="deleteDept" parameterType="java.lang.Integer">
delete from dept where did = #{did};
</delete>
<update id="updateDept" parameterType="org.guangsoft.entity.Dept">
update dept set dname = #{dname} where did=#{did}
</update>
<select id="getDeptById" parameterType="java.lang.Integer"
resultType="org.guangsoft.entity.Dept">
select * from dept where did = #{did}
</select>
<select id="getAllDepts" resultType="org.guangsoft.entity.Dept">
select * from dept
</select>
<select id="getDeptCount" resultType="java.lang.Integer">
select count(*) from dept
</select>
</mapper>
2.7建立数据库表
新建数据库,新建表:
/*
Navicat MySQL Data Transfer Source Server : MySQL
Source Server Version : 50715
Source Host : localhost:3306
Source Database : test Target Server Type : MYSQL
Target Server Version : 50715
File Encoding : 65001 Date: 2016-12-13 20:23:19
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`did` int(11) NOT NULL AUTO_INCREMENT,
`dname` varchar(255) DEFAULT NULL,
PRIMARY KEY (`did`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
2.8建立测试类
package org.guangsoft.test; import java.util.List; import org.guangsoft.entity.Dept;
import org.guangsoft.mapper.DeptMapper;
import org.guangsoft.mapper.impl.DeptMapperImpl;
import org.junit.Test; public class TestDeptMapper
{
DeptMapper deptMapper = new DeptMapperImpl(); @Test
public void testSaveDept()
{
Dept dept = new Dept();
dept.setDname("sssssdfs");
deptMapper.saveDept(dept);
System.out.println(dept.getDid());
} @Test
public void testDeleteDept()
{
deptMapper.deleteDept(3);
} @Test
public void testUpdateDept()
{
Dept dept = new Dept();
dept.setDid(2);
dept.setDname("update");
deptMapper.updateDept(dept);
} @Test
public void testGetDeptById()
{
Dept dept = deptMapper.getDeptById(2);
System.out.println(dept.getDname());
} @Test
public void testGetAllDepts()
{
List<Dept> deptList = deptMapper.getAllDepts();
for(Dept dept : deptList)
{
System.out.println(dept.getDname());
}
} @Test
public void testGetDeptCount()
{
Integer count = deptMapper.getDeptCount();
System.out.println(count);
}
}
2.9添加日志文件
在src目录下建立,log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
总结:mybatis框架通过加载配置文件产生一个statement对象,而该对象的引用是通过namespace.id
3 数据选择的Mapper.xml配置参数
3.1 通过添加部门信息学习xml文件中的占位符
3.1.1#{xxx}占位符
相当于jdbc中sql语句预编译.(产生PreparedStatement对象),解决了sql注入的问题,提高安全性。
如果传入的参数为javabean对象占位符#{xxx},
xxx为javabean对象属性对应的get方法
如果为复合的javabean(A.B),
xxx为javabean对象属性链(b.x),相应属性都对应get方法
如果传入的参数为简单类(String,Integer)
xxx为任意值,保持和传入参数名称一样
3.1.2${xxx}占位符
相当于jdbc中的sql语句通过拼接产生(产生Statement对象),存在sql注入的问题
如果传入的参数为javabean对象占位符#{xxx},
xxx为javabean对象属性对应的get方法
如果为复合的javabean(A.B),
xxx为javabean对象属性链(b.x),相应属性都对应get方法
如果传入的参数为简单类(String,Integer)
xxx只能写value
MyBatis之CRUD的更多相关文章
- MyBatis:CRUD功能
在前面已经自动生成了mapper和pojo,接下来我们实现mybatis的CRUD功能,先新建service.controller层的方法. 这里的sid是一个开源的id生成类,写完后,我们还需要在启 ...
- Mybatis的CRUD案例
一.Mybatis增删改查案例 上一节<Mybatis入门和简单Demo>讲了如何Mybatis的由来,工作流程和一个简单的插入案例,本节主要继上一讲完整的展示Mybatis的CRUD操作 ...
- 【MyBatis】MyBatis实现CRUD操作
1.实现基本CRUD功能 使用MyBatis对数据完整的操作,也就是CRUD功能的实现.根据之前的内容,要想实现CRUD,只需要进行映射文件的配置. 范例:修改EmpMapper.xml文件,实现CR ...
- SpringBoot 整合 Mybatis 进行CRUD测试开发
今天来和大家分享下 Spring Boot 整合 MyBatis 的 CRUD 测试方法开发.因为 MyBaits 有两种开发形式,一种基于注解,一种基于 xml . SpringBoot配置文件也有 ...
- 基于mybatis的CRUD
u 基于Mybatis的CRUD u 掌握MyBatis的结果类型-resultMap和resultType u 掌握MyBatis的参数类型 u 掌握#和$两种语法 1 基于myb ...
- 05 Mybatis的CRUD操作和Mybatis连接池
1.CRUD的含义 CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写.主要被用在描述软件系统中 ...
- 03 Mybatis:05.使用Mybatis完成CRUD
mybatis框架:共四天 明确:我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式.不管使用XML还是注解配置. 第二天:mybatis基本使用 mybatis的单表crud操作 ...
- mybatis(CRUD)
3.mybatis(CRUD) 有了mybatis,我们要对数据库进行增删改查只需要操作接口和mapper.xml文件,然后进行测试就可以了. 实例代码如下: 接口 public interface ...
- MyBatis Tutorial – CRUD Operations and Mapping Relationships – Part 1---- reference
http://www.javacodegeeks.com/2012/11/mybatis-tutorial-crud-operations-and-mapping-relationships-part ...
随机推荐
- 清北暑假模拟day2 将
/* 爆搜,正解弃坑 */ #include<iostream> #include<cstdio> #include<string> #include<cst ...
- 清北学堂模拟day4 捡金币
[问题描述]小空正在玩一个叫做捡金币的游戏.游戏在一个被划分成 n行 n列的网格状场地中进行.每一个格子中都放着若干金币,并且金币的数量会随着时间而不断变化. 小空的任务就是在网格中移动,拾取尽量多的 ...
- [机器学习]信息&熵&信息增益
关于对信息.熵.信息增益是信息论里的概念,是对数据处理的量化,这几个概念主要是在决策树里用到的概念,因为在利用特征来分类的时候会对特征选取顺序的选择,这几个概念比较抽象,我也花了好长时间去理解(自己认 ...
- Smarty基础
smarty将php代码和HTML代码分开,形成两个页面,通过在php页面引用smarty配置文件,利用php控制HTML页面显示 1,libs文件夹,放入需要使用的文件夹下面 2,配置文件:init ...
- 今天微信群需要人家通过吗?是微信bug吗
今天遇到微信群拉人的问题,所以来和大家取经,刚开始拉人一下就拉进去了,后来拉的需要人家通过,今天朋友些也帮我拉人也是这样的,所以想问下微信群扩容的问题.晚上有位朋友跟我说一次拉十个人,不能拉多,这样就 ...
- jquery选择器(三)-过滤选择器
一.基本过滤选择器 二.内容过滤选择器 1. 包含文本内容为“text”的元素 2. 含有某个选择器所匹配的父元素 3. 包含有子元素或者文本的父元素 4. 不含有子元素或者文本的父元素 三.可见性过 ...
- 使用 IntelliJ IDEA 导入 Spark源码及编译 Spark 源代码
1. 准备工作 首先你的系统中需要安装了 JDK 1.6+,并且安装了 Scala.之后下载最新版的 IntelliJ IDEA 后,首先安装(第一次打开会推荐你安装)Scala 插件,相关方法就不多 ...
- 正则表达式学习笔记(附:Java版示例代码)
具体学习推荐:正则表达式30分钟入门教程 . 除换行符以外的任意字符\w word,正常字符,可以当做变量名的,字母.数字.下划线.汉字\s space,空白符 ...
- 移动端全屏滑动的小插件,简单,轻便,好用,只有3k swiper,myswiper,page,stage
https://github.com/donglegend/mySwiper mySwiper 移动端全屏滑动的小插件,简单,轻便,好用,只有3k 下载 直接下载 bower install mySw ...
- hiberante学习笔记
1.配置文件(hibernate映射文件): 让hibernate知道该怎么样去load,store持久化对象: 1.1 数据库忌讳的字段名 1) User 2) index 2.数据库表中一对多,多 ...