七、持久层框架(MyBatis)
一、MyBatis学习
平时我们都用JDBC访问数据库,除了自己需要写SQL,还要操作Connection,Statement,ResultSet这些。
使用MyBatis,只需要自己提供SQL语句,其他的工作,建立数据库连接,Statement等一些JDBC相关异常处理工作都交给了MyBatis去做了。只关心增删改查操作层面上。
MyBatis的工作原理:
每一个MyBatis的应用程序都可以一个SqlSessionFactory对象的实例为核心。首先是通过字节流InputStream通过Resource将配置文件读入,然后通过SqlSessionFactoryBuiler().build()方法创建SqlSessionFactory,然后在通过SqlSessionFactory.openSession()方法创建一个SqlSession为每一个数据库事务服务。经历了MyBatis初始化--->创建SqlSession--->运行SQL语句,返回结果。
1、建立数据库
- create database demo
2、创建实体类
- package com.demo.pojo;
- public class Category{
- private int id;
- private String name;
- //属性的getter/setter方法
- publci int getId(){
- return id;
- }
- public vodi setId(int id){
- this.id=id;
- }
- public String getName(){
- return name;
- }
- public vodi setName(String name){
- this.name=name;
- }
- }
3、配置文件mybatis-config.xml
相当于hibernate.cfg.xml
作用:提供链接数据库用的驱动,数据库名称,编码方式,密码账号
- <property name="driver" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8"/>
- <property name="username" value="root">
- <property name="password" value="admin">
具体配置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>
- <!--自动扫描com.demo.pojo下的类型,使得在后续配置文件Category.xml种使用resultType的时候,可以直接使用Category,而不必写全cmo.demo.pojo.Category-->
- <typeAliases>
- <package name="com.demo.pojo"/>
- </typeAliases>
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
- <property name="username" value="root"/>
- <property name="password" value="admin"/>
- </dataSource>
- </environment>
- </environments>
- <!--映射Category.xml-->
- <mappers>
- <mapper resource="com/dmeo/pojo/Category.xml"/>
- </mappers>
- </configuration>
4、配置文件Category.xml
在包com.demo.pojo下,新建文件Category.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">
- <!--命名空间com.demo.pojo,在后续调用sql语句的时候,会用到它里面的sql语句-->
- <mapper namespace="com.demo.pojo">
- <!--sql语句用id:listCategory进行标示,以供后续代码调用。resultType="Category"表示返回数据和Category关联起来。-->
- <!--这里本应该使用com.demo.pojo.Category,但是在mybatis-config.xml中的配置了<typeAliases><package name="com.demo.pojo"/></typeAliases>,所以可以直接使用Category-->
- <select id="listCategory" resultType="Category">
- select * from category_
- </select>
- </mapper>
5、测试类TestMyBatis
- package com.demo;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.List;
- 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 com.demo.pojo.Category;
- public class TestMyBatis{
- public static void main(String[] args) throw IOException{
- //根据配置文件mybatis-config.xml得到sqlSessionFactory
- String resource="mybatis-config.xml";
- InputStream inputStream=Resources.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
- //根据sqlSessionFactory得到session
- SqlSession session=sqlSessionFactory.openSession();
- //根据session的selectList()方法,调用sql语句listCategory,listCategory这个就是在Category.xml种那条sql语句设置的id。
- List<Category> cs=session.selectList("listCategory");
- //List<Category> cs=session.selectList("com.demo.pojo.listCategory");效果一样,只是比较臃肿,建议用上面那个
- for(Category c:cs){
- System.out.println(c.getName());
- }
- }
- }
二、MyBatis的基本原理
1、应用程序找到MyBatis要的数据
2、MyBatis从数据库找到数据
2.1、通过mybatis-config.xml定位哪个数据库
2.2、通过Category.xml执行对应的select语句
2.3、根据Category.xml把返回的数据库记录封装在Category对象中
2.4、把多个Category对象装在一个Category集合中
3、返回一个Category集合
七、持久层框架(MyBatis)的更多相关文章
- 从零搭建springboot服务02-内嵌持久层框架Mybatis
愿历尽千帆,归来仍是少年 内嵌持久层框架Mybatis 1.所需依赖 <!-- Mysql驱动包 --> <dependency> <groupId>mysql&l ...
- Java数据持久层框架 MyBatis之背景知识二
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- java持久层框架mybatis如何防止sql注入
看到一篇很好的文章:http://www.jfox.info/ava-persistence-framework-mybatis-how-to-prevent-sql-injection sql注入大 ...
- Java数据持久层框架 MyBatis之背景知识三
摘录自:http://www.cnblogs.com/lcngu/p/5437281.html 对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.or ...
- Java数据持久层框架 MyBatis之API学习一(简介)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- Java数据持久层框架 MyBatis之背景知识一
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- 开源顶级持久层框架——mybatis(ibatis)——day02
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一个持久层框架,mybatis ...
- Java持久层框架Mybatis入门
MyBatis是什么 MyBatis是Java的持久层框架,GitHub的star数高达15.8k,是Java技术栈中最热门的ORM框架之一.它支持自定义SQL.存储过程以及高级映射,可以通过XML或 ...
- 开源顶级持久层框架——mybatis(ibatis)——day01
mybatis-day01 1.对原生态jdbc程序中的问题总结 1.1环境 java环境:jdk eclipse:indigo ...
- 整合使用持久层框架mybatis 使用SqlSessionTemplate模板类与使用映射接口 对比
spring中整合使用mybatis的用法总结 一:在Spring配置Mybatis 第一步:将mybatis-spring类包添加 到项目的类库中 第二步:编写spring和持久层衔接的xml文件, ...
随机推荐
- Mongodb 创建管理员帐号与普通帐号
数据库操作权限 readAnyDatabase 任何数据库的只读权限 userAdminAnyDatabase 任何数据库的读写权限 userAdminAnyDatabase 任何数据库用户的管理权限 ...
- sklearn.linear_model.LinearRegression
官网:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html class ...
- SpringMVC获取页面表单参数的几种方式
以下几种方式只有在已搭好的SpringMVC环境中,才能执行成功! 首先,写一个登陆页面和一个Bean类 <%@ page language="java" co ...
- tensorflow example1
用tensorflow实现J(w)=w**2-10*w+25的微分结果 import numpy as npimport tensorflow as tf w=tf.Variable(0,dtype= ...
- 学习笔记52—coverletter
SCI 论文投稿时需要递送一封 Cover letter.你曾经有没有过这样的经历:刚提笔准备写第一句话就陷入沉思——称呼怎么写?或许有的作者认为直接写 Dear editors 就可以了,不用和老外 ...
- linux修改网卡名为eth0
方法1: 1.编辑网卡的配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将里面的NAME和DEVICE项修改为eth0,ONBOOT修改为yes. ...
- Windows下tomcat启动一闪而过
1.用记事本打开tomcat/bin/setclasspath.bat 2.添加两行代码,jdk和jre的根目录,相当于直接给出JAVA_HOME和JRE_HOME路径 set JRE_HOME=D: ...
- Python Selenium Cookie 绕过验证码实现登录
Python Selenium Cookie 绕过验证码实现登录 之前介绍过博客园的通过cookie 绕过验证码实现登录的方法.这里并不多余,会增加分析和另外一种方法实现登录. 1.思路介绍 1.1. ...
- Dynamic Binding
调用方法时,如何决定调用对象还是其父类的方法呢? 在JVM中,根据实际类型(actual type)调用.而非声明类型(declared type),如果实际类型的类中没有该方法,就会沿着inheri ...
- WGCNA | weighted correlation network analysis
早就接触过这个包了,只是一直畏惧,以为很复杂,也没有应用场景,所以认识很肤浅. 现在有应用场景了,我自己开发了一个幼稚的版本,发现了很多需求,后来想起了WGCNA似乎部分解决了我的问题,今天认真打开了 ...