废话不说,直接开门见山!

需要在WebContent下的lib下导入两个包

mybatis-3.2.5.jar

ojdbc6.jar

 package com.xdl.entity;

 import java.io.Serializable;

 public class Dept implements Serializable{
private Integer deptno;//类型和名称与表保持一致
private String dname;
private String loc; public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
} }

Dept

 package com.xdl.Mapper;

 import java.util.List;

 import org.apache.ibatis.annotations.Param;

 import com.xdl.entity.Dept;

 public interface DeptMapper {
/**
* 查询所有
*
*/
public List<Dept> findAll(); /**
* 通过id查询
*
*/
public Dept findById(int no); /**
* 插入
*
*/
public int save(Dept dept); /**
* 修改
*
*/
public int update(Dept dept); /**
* 通过id删除
*
*/
public int delete(int no); /**
* 排序
*
*/
public List<Dept> findAllOrder(@Param("n") String no);
}

DeptMapper

 <?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.xdl.Mapper.DeptMapper">
<select id="findAll" resultType="com.xdl.entity.Dept">
select * from dept
</select>
<select id="findById" parameterType="int" resultType="com.xdl.entity.Dept">
select *
from dept where deptno = #{no}
</select>
<select id="findAllOrder" parameterType="String" resultType="com.xdl.entity.Dept">
select * from dept order by ${n}
</select>
<insert id="save" parameterType="com.xdl.entity.Dept">
insert into dept
(deptno,dname,loc) values (dept_seq.nextval,#{dname},#{loc})
</insert>
<update id="update">
update dept set dname = #{dname},loc = #{loc} where
deptno = #{deptno}
</update>
<delete id="delete">
delete from dept where deptno = #{no}
</delete>
</mapper>

deptmapper.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>
<!-- 将底层日志打印 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<environments default="environment">
<environment id="environment">
<transactionManager type="JDBC" />
<!-- 指定数据库连 -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
<property name="username" value="SCOTT" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
<!-- 指定SQL定义文件 -->
<mappers>
<mapper resource="com/xdl/sql/DeptMapper.xml" />
</mappers>
</configuration>

sqlmap-config.xml

 package com.xdl.test;

 import java.io.Reader;

 import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil {
static SqlSessionFactory factory;
static {
try {
String conf = "sqlmap-config.xml"; // 定义配置文件
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
Reader reader = Resources.getResourceAsReader(conf);
factory = builder.build(reader);
} catch (Exception e) {
e.printStackTrace();
}
} public static SqlSession getSession() {
SqlSession sqlSession = factory.openSession();
return sqlSession;
}
}

MybatisUtli

写一个测试类(实现查询和排序)

 package com.xdl.test;

 import java.util.List;

 import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import com.xdl.Mapper.DeptMapper;
import com.xdl.entity.Dept; public class TestDeptMapper {
/**
* 查询所有
*/
@Test
public void testFindAll() {
SqlSession sqlSession = MyBatisUtil.getSession();
// sqlSession.getMapper(接口.class); 根据DeptMapper映射器接口动态生成实现对象
DeptMapper deptDao = sqlSession.getMapper(DeptMapper.class);
System.out.println(deptDao.getClass().getName());
List<Dept> list = deptDao.findAll();
for (Dept dept : list) {
System.out.println(dept.getDeptno() + ":" + dept.getDname() + ":" + dept.getLoc());
}
sqlSession.close();
} /**
* 进行排序
*/
@Test
public void testOrderBy() {
SqlSession sqlSession = MyBatisUtil.getSession();
// sqlSession.getMapper(接口.class); 根据DeptMapper映射器接口动态生成实现对象
DeptMapper deptDao = sqlSession.getMapper(DeptMapper.class);
System.out.println(deptDao.getClass().getName());
List<Dept> list = deptDao.findAllOrder("deptno");
for (Dept dept : list) {
System.out.println(dept.getDeptno() + ":" + dept.getDname() + ":" + dept.getLoc());
}
sqlSession.close();
}
}

TestDeptMapper

写一个测试类(实现增删改查排序)

 package com.xdl.test;

 import java.util.List;

 import org.apache.ibatis.session.SqlSession;
import org.junit.Test; import com.xdl.entity.Dept; public class TestDept {
private static SqlSession sqlSession = MyBatisUtil.getSession(); /**
* 查询所有
*/
@Test
public void testFindAll() {
// 使用sqlSession操作SQL selectList("id",parameterType值)
List<Dept> list = sqlSession.selectList("com.xdl.Mapper.DeptMapper.findAll");
for (Dept dept : list) {
System.out.println(dept.getDeptno() + ":" + dept.getDname() + ":" + dept.getLoc());
}
sqlSession.close();
} /**
* 根据ID查询
*/
@Test
public void testFindById() {
Dept dept = sqlSession.selectOne("com.xdl.Mapper.DeptMapper.findById", 10);
if (dept != null) {
System.out.println(dept.getDeptno() + ":" + dept.getDname() + ":" + dept.getLoc());
} else {
System.out.println("查询结果为空~~");
}
sqlSession.close();
} /**
* 插入
*/
@Test
public void testSave() {
Dept dept = new Dept();
dept.setDname("xian");
dept.setLoc("dayanta");
int rows = sqlSession.insert("com.xdl.Mapper.DeptMapper.save", dept);
String str = "条记录插入成功";
System.out.println(rows + str);
sqlSession.commit();
sqlSession.close();
} /**
* 修改
*/
@Test
public void testUpdate() {
Dept dept = new Dept();
dept.setDeptno(10);
dept.setDname("spring");
dept.setLoc("bj");
int rows = sqlSession.update("com.xdl.Mapper.DeptMapper.update", dept);
String str = "条记录修改成功";
System.out.println(rows + str);
sqlSession.commit();
sqlSession.close();
} /**
* 通过id删除
*/
@Test
public void testDelete() {
Dept dept = new Dept();
int rows = sqlSession.delete("com.xdl.Mapper.DeptMapper.delete", 1);
String str = "条记录删除成功";
System.out.println(rows + str);
sqlSession.commit();
sqlSession.close();
}
}

TestDept

1.在MyBatis中定义SQL语句时,如果SQL里有?号,就必须写parameterType=””参数是int就写对应的类型并且名字可以自定义

2. 在查询的时候最后会返回一个结果集对象,所以就必须在后面继续追加resultType=包名.实体类名

3 在执行DML的时候里面要执行多个参数的时候,可以选择集合或者对象,

parameterType=包名.实体类名.参数,类型和实体类要一致,参数不一致,可以通过给sql起别名解决,类型不一致就需要对框架里的部分参数进行转换

4 通过实现增删改查,发现DQL有resultType属性,DML都没有resultType属性              数据访问层(Dao)

5 mapper.xml映射器里的<mapper namespace=包名.接口名,才可以 达到Mapper.xml里的数据库代码映射到接口中

总结为:

a. Mapper接口中方法名和sql定义id值保持一致

b. Mapper接口中方法参数类型和sql定义中parameterType类型保持一致

c. Mapper接口中方法返回类型,多行查询返回List,单行查询返回对象类型和resultType保持一致DML返回类型为int或void

Mapper映射器规则

1 Mapper接口中方法名与SQL定义id值保持一致

2 Mapper接口中方法参数类型与SQL定义中parameterType类型保持一致

3 Mapper接口中方法返回类型,多行查询返回List、单行返回对象,类型与resultType保 持一致;增删改操作返回类型为int或void

4 SQL定义文件namespace需要指定为"包名.接口名"

参数映射中${}和#{}的区别

1 #{}参数映射机制采用的是PrepareStatement,将SQL和参数分开发送

2 ${}参数映射机制采用Statement,将SQL和参数拼一起发送执行

3 建议采用#{}方式,更安全

4 ${}适合用在字段名或表名位置;#{}适合用在字段值位置

Mybatis实现部门表增删改查以及排序的更多相关文章

  1. python-列表增删改查、排序、两个list合并、多维数组等

    一.list列表 数组 列表类型:list 下标从0开始,0,1,2... 二.列表增加元素 stus.append() 在列表末尾增加一个元素: stus.insert(,)  在指定位置添加一个元 ...

  2. GZFramwork数据库层《四》单据主从表增删改查

    同GZFramwork数据库层<三>普通主从表增删改查 不同之处在于:实例 修改为: 直接上效果: 本系列项目源码下载地址:https://github.com/GarsonZhang/G ...

  3. GZFramwork数据库层《三》普通主从表增删改查

    运行结果: 使用代码生成器(GZCodeGenerate)生成tb_Cusomer和tb_CusomerDetail的Model 生成器源代码下载地址: https://github.com/Gars ...

  4. GZFramwork数据库层《二》单据表增删改查(自动生成单据号码)

    运行效果: 使用代码生成器(GZCodeGenerate)生成tb_EmpLeave的Model 生成器源代码下载地址: https://github.com/GarsonZhang/GZCodeGe ...

  5. GZFramwork数据库层《一》普通表增删改查

    运行结果:     使用代码生成器(GZCodeGenerate)生成tb_MyUser的Model 生成器源代码下载地址: https://github.com/GarsonZhang/GZCode ...

  6. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  7. Vc数据库编程基础MySql数据库的表增删改查数据

    Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...

  8. TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查、有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句。

    TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查.有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句. select 'grant '|| PRIV ...

  9. SSH框架下的多表增删改查

    下载地址:SSH框架下的多表增删改查 点击进入码云Git下载 点击进入CSDN下载 项目结构: 项目代码就不全部贴出来了,只贴下核心代码.需要项目的自己可以去下载. package com.atgui ...

随机推荐

  1. js的异步加载你真的懂吗

    面试高频之js的异步加载 讲这个问题之前, 我们从另一个面试高频问题来切入, 我们的web页面从开始解析到页面渲染完成都经历了什么 ?  1  ,  创建document对象, 开始解析页面,    ...

  2. 『这是一篇干货blog』

    更新记录一些很好的干货博客以及工具网站. 各文章,工具网站版权归原作者所有,侵删. Articles 浅谈C++ IO优化--读优输优方法集锦 浅谈斜率优化 思维导图好助手--开心食用Xmind Ty ...

  3. Windows代码,添加一个节,以及RVA跟FOA互相转化,以及内存文件对齐代码.

    / 1.修改文件头节个数 +1 2.修改ImageBase 3.遍历节表,拷贝最后一个节表到下面 4.修改节的虚拟大小(节表.virtualSize) 5.修改节的虚拟地址(RVA 节表.virtua ...

  4. Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件

    由于公司最近在做技术转型(从.Net转Java),因此自己也开启了学习Java之路.学习Java怎么能不学习这几年这么火的Spring Boot框架,由于自己有总结的习惯,因此会把学习的过程以博客的形 ...

  5. 动态路由协议(RIP)

    虽然静态路由在某些时刻很有用,但是必须手工配置每条路由条目,对于大中型的网络或拓补经常发生变化的清空,配置和维护静态路由的工作量就变得非常繁重,而且不小心还容易出错,因此就需要一种不需要手工配置的路由 ...

  6. TOTP 介绍及基于C#的简单实现

    TOTP 介绍及基于C#的简单实现 Intro TOTP 是基于时间的一次性密码生成算法,它由 RFC 6238 定义.和基于事件的一次性密码生成算法不同 HOTP,TOTP 是基于时间的,它和 HO ...

  7. 将SQL Server查询导出本地excel(mail发送)

    1.将数据库中查询的表格导出到指定的路径,首先启用.xp_cmdshell,上一篇随笔有写如何开启.xp_cmdshell. DECLARE @sql  NVARCHAR(4000)    --定义变 ...

  8. CDN工作机制和负载均衡

    定义:  CDN 即内容分布网络,(Content Delivery Netwrok) ,是构筑在现有Internet上的一种先进的流量分配网络,其目的是通过在现有的Internet中增加一层新的网络 ...

  9. windows powershell基础

    windows powershell基础 目录: 1.管道和重定向 2.命令执行 3.变量 4.数组和哈希表 #@()创建数组,使用","把每个值分隔开,@{}创建哈希表,用&qu ...

  10. eShopOnContainers 知多少[2]:Run起来

    环境准备 Win10(开启Hyper-V) .NET Core SDK Docker for Windows VS2017 or VS Code Git SQL Server Management S ...