数据库的经典操作:增删改查。

在这一章我们主要说明一下简单的查询和增删改,并且对程序接口做了一些调整,以及对一些问题进行了解答。

1、调整后的结构图:

2、连接数据库文件配置分离:

  一般的程序都会把连接数据库的配置单独放在.properties 文件中,然后在XML文件中引用,示例如下:

  config.properties:

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=phonesurvey
password=world

  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>
<properties resource="config.properties" />
<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>
<mappers>
<mapper resource="nankang/dao/agentDao.xml" />
</mappers>
</configuration>

3、SqlSession分离:

  SqlSeesion单独做成工具类,以便调用,示例如下:

SqlSessionHelper:

package nankang.util;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class SqlSessionHelper { public static SqlSessionFactory getSessionFactory(){
SqlSessionFactory sessionFactory = null;
String resource= "mybatis-config.xml";
try{
InputStream inputStream = Resources.getResourceAsStream(resource);
//Reader reader = Resources.getResourceAsReader(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch(Exception ex){
ex.printStackTrace();
}
return sessionFactory;
}
}

  SqlSessionFactory创建时,根据Reader和InputStream都可以。

4、XML文件添加内容:

   agentDao.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="nankang.dao.AgentDao">
<!-- 根据Id查询 -->
<select id="selectAgentById" parameterType="string" resultType="nankang.po.Agent">
select * from Agent where AgentId=#{id}
</select>
<!-- 添加 -->
<insert id="insertAgent" parameterType="nankang.po.Agent">
insert into Agent(agentId, companyCode, LoginName, AgentPwd, AgentCode, Name, status,sysFlag)
values(#{agentId},'SHNK',#{loginName},'D41D8CD98F00B204E9800998ECF8427E',#{agentCode},#{name},1,1)
</insert>
<!-- 删除 -->
<delete id="deleteAgent" parameterType="string">
delete from Agent where agentid=#{id}
</delete>
<!-- 修改 -->
<update id="updateAgent" parameterType="nankang.po.Agent">
update agent set name=#{name} where agentid=#{agentId}
</update>
<!-- 查询所有 -->
<select id="selectAllAgent" resultType="nankang.po.Agent">
select * from Agent
</select>
<!-- 查询所有无返回对象 -->
<select id="selectAllAgent2" resultType="hashmap">
select * from Agent
</select> </mapper>

AgentDao.java:

package nankang.dao;

import java.util.List;
import java.util.Map; import nankang.po.Agent; import org.apache.ibatis.annotations.Select; public interface AgentDao {
//根据Id查询
public Agent selectAgentById(String Id);
//根据名称查询
@Select("select * from Agent where name=#{name}")
public Agent selectAgentByName(String name);
//添加
public int insertAgent(Agent agent);
//删除
public int deleteAgent(String id);
//修改
public int updateAgent(Agent agent);
//查询所有的
public List<Agent> selectAllAgent();
public List<Map<String, Object>> selectAllAgent2(); }

  1、XML文件中的语句,可以直接写在接口文件中,如:根据名称查询;

  2、其他参考示例。

  几个问题说明:

  1)如何查询数据集合?

    使用ResultType设置,返回用List<T>即可

  2)查询一条数据,如果为空,怎么判断?

    如果没有查询到数据,返回为NULL,进行空对象判断即可

  3)查询所有的集合,不放在构建对象的List中:

    resultType=map,返回类型 List<Map<String,Object>>,字段为空则不展示在Map中

  4)如何实现事务:

    SqlSession:commit,rollback,close

  

5、测试

package nankang.test;

import java.util.List;
import java.util.Map; import nankang.dao.AgentDao;
import nankang.util.SqlSessionHelper; import org.apache.ibatis.session.SqlSession; public class test { /**
* @param args
*/
public static void main(String[] args) { SqlSession sqlSession = SqlSessionHelper.getSessionFactory().openSession();
try{ AgentDao agentMapper = sqlSession.getMapper(AgentDao.class); //根据Id查询
// Agent agent = agentMapper.selectAgentById("SHNKAG00000000051");
// if(null != agent){
// System.out.println(agent.getName());
// }else{
// System.out.println("不存在该用户");
// }
// agent = agentMapper.selectAgentByName("1001");
// System.out.println(agent.getAgentId());
//查询所有
List<Map<String, Object>> agentList = agentMapper.selectAllAgent2();
System.out.println(agentList.size());
//添加
// Format format = new SimpleDateFormat("00yyyyMMddhhmmss");
// Calendar calendar = Calendar.getInstance();
// String dateStr = format.format(calendar.getTime());
// Agent agent = new Agent();
// agent.setAgentId(dateStr);
// agent.setLoginName("1111");
// agent.setAgentCode("aaaa");
// agent.setName("aaaa");
// int num = agentMapper.insertAgent(agent);
// System.out.println(num);
//删除
// int num = agentMapper.deleteAgent("0020150226093127");
// System.out.println(num);
//更新
// Agent agent = new Agent();
// agent.setAgentId("0020150226010005");
// agent.setName("Test");
// int num = agentMapper.updateAgent(agent);
// System.out.println(num); //增删改,提交
sqlSession.commit();
System.out.println("完成");
}catch(Exception ex){
sqlSession.rollback();
System.out.println(ex.getMessage());
}finally{
sqlSession.close();
} } }

  这边需要注意的是:SqlSession一定要close

MyBatis的增删改查。的更多相关文章

  1. 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作

    一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...

  2. MyBatis批量增删改查操作

      前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作.前文地址:http://blog.csdn.net/mahoking/article/details/43673741 ...

  3. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。

    1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...

  4. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查

    使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...

  5. 从0开始完成SpringBoot+Mybatis实现增删改查

    1.准备知识: 1)需要掌握的知识: Java基础,JavaWeb开发基础,Spring基础(没有Spring的基础也可以,接触过Spring最好),ajax,Jquery,Mybatis. 2)项目 ...

  6. Spring Boot入门系列(六)如何整合Mybatis实现增删改查

    前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...

  7. Mybatis实例增删改查(二)

    创建实体类: package com.test.mybatis.bean; public class Employee { private Integer id; private String las ...

  8. mybatis的增删改查返回值小析(六)

    本文验证了通过mybatis访问数据库时的,增删改查的返回值情况. 直接看代码. 1.service层 /** *@Author: Administrator on 2020/3/12 15:15 * ...

  9. ssm 框架实现增删改查CRUD操作(Spring + SpringMVC + Mybatis 实现增删改查)

    ssm 框架实现增删改查 SpringBoot 项目整合 一.项目准备 1.1 ssm 框架环境搭建 1.2 项目结构图如下 1.3 数据表结构图如下 1.4 运行结果 二.项目实现 1. Emplo ...

随机推荐

  1. 《MySQL必知必会》读书笔记_4

    PS:一个实际的存储过程案例 CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_delete_article_by_id`(IN `id` int) BE ...

  2. C++string函数之strcpy_s

    strcpy_s和strcpy()函数的功能几乎是一样的.strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串.在程序运行时,这将导致 ...

  3. JSF-受管Bean与EL表达式

    受管Bean与EL表达式 1)编写Bean:①有一个不带形参的构造方法 ②getXxx.setXxx ③一般要实现io.Serializable接口 2)声明受管Bean:①bean名称为外界访问其属 ...

  4. Java虚拟机-类文件

    代码编译的结果从本地机器码转换为字节码,是存储格式发展的一小步,却是编程语言发展的一大步.计算机只认识0和1,所以我们的程序需要经过编译器翻译成由0和1组成的二进制格式才能由计算机执行.经过技术的发展 ...

  5. Python2和Python3比较分析

    一直有看到网上有讨论Python2和Python3的比较,最近公司也在考虑是否在spark-python大数据开发环境中升级到python3.通过本篇博文记录Python2.7.13和Pthon3.5 ...

  6. phone number

    problem description: you should change the given digits string into possible letter string according ...

  7. Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧

    一.问题概述 在一个多月前,组长让我研究下持续集成.我很自然地选择了jenkins.当时,(包括现在也是),部分服务器用的是windows主机. 我当时想了想,如果我把jenkins装在windows ...

  8. 【leetcode】 算法题 两数之和

      问题       给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 1 ...

  9. 用一张表里的记录更新自己(或另一张表)里的记录(exists使用)

    update jqhdzt set shid=(select shid from v_plat_userjqinfo t where jqhdzt.jqbh=t.JQBH and jqhdzt.shi ...

  10. python爬虫入门(九)Scrapy框架之数据库保存

    豆瓣电影TOP 250爬取-->>>数据保存到MongoDB 豆瓣电影TOP 250网址 要求: 1.爬取豆瓣top 250电影名字.演员列表.评分和简介 2.设置随机UserAge ...