简介:

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

MyBatis的功能架构:

分为三层

1.API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2.数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3.基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

优点:

1.解除sql与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

2.提供映射标签,支持对象与数据库的orm字段关系映射

3.提供对象关系映射标签,支持对象关系组建维护

4.提供xml标签,支持编写动态sql。

until

public class MyBatisDBUtil {//SqlSession//工厂模式private static SqlSessionFactory sqlSessionFactory; //以一个 SqlSessionFactory 的实例为中心的public static void main (String[] args) {  //测试连接数据库是否成功System.out.println(getSqlSession());}public static SqlSession getSqlSession() {if(sqlSessionFactory == null) {sqlSessionFactory = getSqlSessionFactory();}SqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession;}public static SqlSessionFactory getSqlSessionFactory() { //SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得String configPath = "conf/mybatis-config.xml"; try {InputStream in = Resources.getResourceAsStream(configPath);//输入流(InputStream)sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得} catch (IOException e) {e.printStackTrace();}return sqlSessionFactory;}
}

不用再建一个Servlet接收参数,直接建一个实体类,直接把变量传进去即可

数据模型 (往数据库进行一个girl表的操作)

public class Girl {private String name;private Integer age;private Date birth; public Girl() {super();}public Girl(String name, Integer age, Date birth) {super();this.name = name;this.age = age;this.birth = birth;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}@Overridepublic String toString() {return "Girl [name=" + name + ", age=" + age + ", birth=" + birth + "]";}}

属性文件

jdbc.username=TEST
jdbc.password=TEST
jdbc.ClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl

XML配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd ">
<configuration>   <!-- XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置 --><!-- 获取属性文件 --><properties resource="conf/jdbc_orcl.properties"></properties><!-- 类型别名, 为实体类定义一个别名 --><typeAliases><package name="model"/>  <!-- 包名,在映射的XML文件里面的resultType直接写类名即可 -->  </typeAliases><environments default="test"><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><!-- 使用属性文件里面的值, --><environment id="test"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.ClassName}"/>  <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/>  <property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers> <!-- mappers 元素则是包含一组 mapper 映射器(这些 mapper 的 XML 文件包含了 SQL 代码和映射定义信息),引入映射文件, 引入方式有四种:url, class, resource, package --><mapper resource="mapper/GirlMapper.xml"/> <!-- 直接扫描的是映射文件本身 --></mappers></configuration>

Mapper映射配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.GirlMapper">  <!-- 映射的SQL语句 --><!--  <insert id="addGirl" parameterType="model.Girl">  表示的是参数类型,model下面的实体类,里面的变量直接进入insert into girl values(#{name},#{age})  这里面获取的名字是跟Girl实体类里面的名称是相对应的</insert> --><!--  查询表中所有数据 --><select id="selectGirls" resultType="Girl">  <!-- 直接写那个类名就好,此处写的id名称为映射接口里面定义的方法名-->select * from girl   </select><!-- 条件查询,根据年龄查找 --><select id="selectGirl2" resultType="Girl">select * from girl g where g.age = #{param1} </select><!-- 条件删除 --><delete id="deleteGirl" parameterType="String">delete  girl g where g.name = #{param1}</delete><!-- 添加数据 --><insert id="insertGirl" parameterType="map">insert into girl values(#{girl_name},#{girl_age},to_date(#{girl_birth},'yyyy-mm-dd'))</insert><!--  修改数据 --><update id="updateGirl" parameterType="Integer">update girl g set g.name = '王大娘' where g.age = #{param1}</update>
</mapper>

Mapper接口

public interface GirlMapper {  //接口的名字要与xml里面的名字相同,这里面的方法不允许重载List<Girl> selectGirls(); //查找全表List<Girl> selectGirl2(Integer age);  //根据年龄查询int deleteGirl(String name); //根据姓名删除int insertGirl(Map<String,Object> map); //插入数据int updateGirl(Integer age); //更新数据
}

Junit单元测试框架

class JTest {  //单元测试框架private SqlSession sqlSession;private GirlMapper gm;void test() {  //查询表的全部List<Girl> list = gm.selectGirls();for (Girl g : list) {System.out.println(g);}}void test2() {  //根据年龄查询List<Girl> list = gm.selectGirl2(20);for (Girl g : list) {System.out.println(g);}}void test3() {  //根据姓名删除int i =  gm.deleteGirl("小孩");System.out.println(i);}void test4() {  //添加数据Map<String,Object> map = new HashMap<String,Object>();map.put("girl_name", "哈哈");map.put("girl_age", 21);map.put("girl_birth","1993-11-24");int i = gm.insertGirl(map);System.out.println(i);}@Testvoid test5() {  //根据年龄更新数据int i =  gm.updateGirl(20);System.out.println(i);}@BeforeEachvoid setUp() throws Exception {sqlSession = MyBatisDBUtil.getSqlSession();  //调用until包下面的MybatisDBUtil类里面的getSqlSession方法gm = sqlSession.getMapper(GirlMapper.class); //sqlSession先把映射的文件和接口放进一个集合里面,找到映射接口的路径}@AfterEachvoid tearDown() throws Exception {    sqlSession.commit();  //提交sqlSession.close();   //关闭}}

转载于:https://www.cnblogs.com/zuo72/p/8353135.html

Mybatis简单数据库查询相关推荐

  1. Python实现一个简单数据库查询接口编写

    Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架. Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展 ...

  2. java毕业设计智能分析的简单聚众筹平台Mybatis+系统+数据库+调试部署

    java毕业设计智能分析的简单聚众筹平台Mybatis+系统+数据库+调试部署 java毕业设计智能分析的简单聚众筹平台Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开 ...

  3. 数据库原理与应用(SQL Server)笔记 第二章 简单数据查询

    文章目录 前言 一.SELECT 子句 (一)投影指定的列和投影全部列 (二)AS子句修改查询结构的列标题 例题1 (三)TOP谓词限制结果集中的行数 (四)INTO子句将结果插入新表中 例题2 (五 ...

  4. php简单的mysql类_超简单php mysql数据库查询类

    本文章为你免费提供一款漂亮的超简单php mysql数据库查询类哦 */ class Config{ private $host;        //主机名称:一般是localhost private ...

  5. 数据库查询求小于_SQL学习笔记(二)简单查询

    本篇主要学习如何通过简单查询获取想要的数据. 从零学会SQL:简单查询​www.zhihu.com 基本的查询语句 从数据库中查找数据时要使用select子句,select子句是sql中使用最多.最基 ...

  6. mysql数据库查询源码_超简单php mysql数据库查询类

    本文章为你免费提供一款漂亮的超简单php mysql数据库查询类哦 */ class Config{ private $host; //主机名称:一般是localhost private $root; ...

  7. php输出mysql查询结果_PHP简单获取数据库查询结果并返回JSON

    header("Content-type:text/html;charset=utf-8"); //连接数据库 $con = mysql_connect("localho ...

  8. JDBC简单连接查询MySQL数据库

    代码: DButil.java(连接关闭数据库的类) import java.sql.DriverManager; import java.sql.SQLException; import java. ...

  9. java毕业设计OTET交通在线查询购票系统Mybatis+系统+数据库+调试部署

    java毕业设计OTET交通在线查询购票系统Mybatis+系统+数据库+调试部署 java毕业设计OTET交通在线查询购票系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S ...

最新文章

  1. session过期重新登陆_深入分析Session和Cookie-前端面试题
  2. C# 图片缩放放大剪切代码
  3. [导入]创建、查询、修改带名称空间的 XML 文件的例子
  4. NYOJ 10 skiing
  5. java接口开发规范,干货满满
  6. [Linux]变量加减赋值以及将String转int
  7. mysql 数据库文件导入和导出、远程上传和下载数据库
  8. Git协助方式:Fork项目开发新功能并使用Pull-Request把新特性推送给原项目
  9. java jint_Android使用JNI实现Java与C之间传递数据
  10. 栈的亚特兰数与二叉树的前序中序遍历序列
  11. WCF开发之消息契约(MessageContract)
  12. Ruby 核心技术与实战 36 讲
  13. TranslateAnimation 使用详解
  14. 单点登录 Oauth2认证 详解
  15. 002java面试笔记——【java基础篇】从团800失败面试总结的java面试题
  16. 为什么要预测、优化工业生产中的问题呢?
  17. SIP: From ,Contact, Via 和 Record-Route/Route head字段详解
  18. 【思维导图怎么画】万彩脑图大师教程 | 添加主题与线条
  19. 立体匹配-ITSA-CVPR2022论文学习笔记
  20. 3ds运行linux,3ds自制操作软件

热门文章

  1. 【转】mac/linux终端光标的快捷键操作
  2. 计算机信息处理技术的基础知识列举出一些易错易混淆知识点,计算机考证实训报告指导书.doc...
  3. 机器人弹古筝图片_古筝维修:40年的牡丹牌古筝,动了个外科手术
  4. sony lt26i android 5.1rom,索尼 LT26 Xperia L 5.1.1 ROM刷机包 扁平化 来电归属 农历 新相机 稳定流畅...
  5. 微博爬取显示全文_Python爬虫---chrome driver爬取微博(教你几十行代码爬取财宝宝微博长文)...
  6. zybo上运行linux,Zybo开发板linux作业系统移植
  7. 再说变体结构 - 回复 彬 的问题
  8. matlab怎么返回操作,Matlab中function函数使用操作方法
  9. java调用数据库存储过程的接口是_JAVA调用数据库存储过程
  10. SQL那些事儿(十)--oracle主键、唯一键与索引