本文共 8512 字,大约阅读时间需要 28 分钟。
为什么使用框架
框架的优势如下:
1.不用再考虑公共问题,框架已经帮我们做好了。2.可以专心用于业务逻辑,保证核心业务逻辑的开发质量。3.结构统一,便于学习和维护。4.框架中继承了前人的经验,可以帮助新手写出稳定、性能优良而且结构优美的高质量程序。什么是框架
框架(Framework)是一个提供了可重用的公共结构的半成品。框架就是应用程序的“骨架”,开发者可以在这个骨架上加入自己的东西。2.MyBatis介绍及其环境搭建
MyBatis前身是iBatis,本是Apache的一个开源的项目
ORM框架实体类和SQL语句之间建立映射关系特点基于SQL语法,简单易学能了解底层封装过程SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度方便程序代码调试什么是数据持久化
数据持久化就是将内存中的数据模型转换为存储模型,已经将存储模型转换为内存中的数据模型的统称。什么是ORM
ORM(Object/Relational Mapping)即对象/关系映射,是一种持久化技术。在对象模型和关系数据库模型之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。MyBatis通过简单的XML或者注解进行配置和原始映射,将实体类和SQL语句之间建立映射,是一种半自动化的ORM实现。MyBatis环境搭建
1.下载jar包
进入官方网站下载:mybatis.org 或者下载好的jar包解压如图所示
lib目录中存放着编译依赖包,各依赖文件说明如下:
2.部署jar文件到项目中
3.创建MyBatis核心配置文件mybatis-config.xmlMyBatis核心配置文件主要用于配置数据库连接和MyBatis运行时所需的各种特性,包含了设置和影响MyBatis行为的属性。在项目工程下创建“Source Folder”类型的resources目录,将配置文件放入,一般将配置文件命名为"mybatis-config.xml"mybatis-config.xml文件的几个常用元素的作用如下:1.configuration:配置文件的根元素节点
2.properties:通过resource属性从外部指定properties属性文件(database.properties),database.properties属性文件描述数据库连接的相关配置,包括数据库驱动(jdbc.driver)、连接数据库的url(jdbc.url)、数据库用户名(jdbc.user)、数据库密码(jdbc.pwd),位置也在/resoureces目录下。3.settings:设置MyBatis运行中的一些行为,比如此处设置MyBatis的log日志实现为LOG4J,即使用log4j实现日志功能。4.environments:表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,该元素节点下可以配置多个environment子元素节点,但是必须指定其中一个默认运行环境(通过default指定)。5.environment:配置MyBatis的一套运行环境,需指定运行环境ID、事务管理、数据源配置等相关信息。6.mappers:作用是告诉MyBatis去×××到SQL映射文件(该文件内容是开发者定义的映射sql语句),整个项目中可以有1个或多个SQL映射文件7.mapper:mappers的子元素节点,具体指定SQL映射文件的路径,其中resource属性的值表述了sql映射文件的路径(类资源路径)示例1:
复制代码
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"""<configuration><!--引入database.properties文件--><properties resource="database.properties"/><!--配置log的实现为LOG4J--><settings><setting name="logImpl" value="LOG4J"/></settings><!--配置运行环境-->复制代码<environments default="development"><environment id="development"><!--配置事务管理,采用JDBC的事务管理--><transactionManager type="JDBC"></transactionManager><!--POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.user}"/><property name="password" value="${jdbc.pwd}"/></dataSource></environment></environments><!--将mapper文件加入到配置文件中--><mappers><mapper resource="com/ssms/dao/user/UserMapper.xml"/></mappers></configuration>复制代码复制代码注意:mybatis-config.xml文件的元素节点是有一定顺序的,节点位置若不按顺序排位,那么XML文件会报错。database.propertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.user=rootjdbc.pwd=1234jdbc.url=jdbc:mysql://localhost:3306/ssms?useUnicode=true&characterEncoding=utf-8&useSSL=false复制代码复制代码
4.创建持久化类(POJO)和SQL映射文件POJO(Plain Ordinary Java Object),即普通Java对象,POJO类可以简单理解为符合JavaBean规范的实体类,它不需要继承和实现任何特殊的Java基类或者接口。创建用户表POJO类
示例2:复制代码
public class User { private Integer id; //idprivate String userCode; //用户编码private String userName; //用户名称private String userPassword; //用户密码private Integer gender; //性别private Date birthday; //出生日期private String phone; //电话private String address; //地址private Integer userRole; //用户角色private Integer createdBy; //创建者private Date creationDate; //创建时间private Integer modifyBy; //更新者private Date modifyDate; //更新时间//省略getter&setter方法}注意:在MyBatis中,不需要POJO类名与数据库表名一致,因为MyBaits是POJO与SQL语句之间的映射机制,一般情况下,保证POJO对象的属性与数据库表的字段名一致即可。复制代码复制代码示例3:<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"";<mapper namespace="com.ssms.dao.user.UserMapper"><!--查询用户表记录--><select id="count" resultType="int">SELECT count(1) AS COUNT FROM USER</select></mapper>复制代码经验:SQL映射文件一般都对应于相应的POJO,所以一般都是采用POJO的名称+Mapper的规则来进行命名,当然该Mapper文件属于DAO层的操作,应该放置在dao包下,并根据业务功能进行分包放置。上述配置文件中各元素的意义:mapper:映射文件的根元素节点,只有一个属性namespacenamespace:用于区分不同的mapper,全局唯一select:表示查询语句,是MyBatis最常用的元素之一,常用属性如下:id属性:该命名空间下唯一标识符resultType属性:表示SQL语句返回值类型,此处通过SQL语句返回的是int类型复制代码
5.创建测试类在工程中加入JUnit4,创建测试类(UserMapperTest.java)进行测试,代码如下:public class UserMapperTest { public static void main(String[] args) throws Exception { //1.读取全局配置文件:mybatis-config.xmlString resource="mybatis-config.xml";//获取mybatis-config.xml文件的输入流InputStream is= Resources.getResourceAsStream(resource);//2.创建SqlSessionFactory对象SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);//创建SqlSessionint count=0;SqlSession sqlSession=null;sqlSession=factory.openSession();count=sqlSession.selectOne("com.ssms.dao.user.UserMapper.count");sqlSession.close();System.out.println(count);}}复制代码3.MyBatis的基本要素——核心对象SqlSessionFactoryBuilder
1.build()方法使用三种形式的配置信息,分别是InputStream(字节流)、Reader(字符流)、Configuration(类)2.SqlSessionFactoryBuilder最大特点是用过即丢SqlSessionFactory1.openSession()方法获取SqlSession实例,openSession()传入参数true表示关闭事务控制,自动提交,false开启事务控制机制。默认为true。2.SqlSessionFactory一旦创建,就会在整个应用运行过程中始终存在。MyBatisUtil.java 示例:复制代码
public class MyBatisUtil { private static SqlSessionFactory factory;static { try { InputStream is= Resources.getResourceAsStream("mybatis-config.xml");factory=new SqlSessionFactoryBuilder().build(is);}catch (IOException e){ e.printStackTrace();}}public static SqlSession createSqlSession(){ return factory.openSession(false);}public static void closeSqlSession(SqlSession sqlSession){ if (null!=sqlSession){ sqlSession.close(); } }}
复制代码SqlSession1.SqlSession是用于执行持久化操作的对象,类似于JDBC中的Connection。2.SqlSession对应一次数据库会话,SqlSession不是线程安全的。3.SqlSession有两种使用方式第一种使用方式:1).先在Mapper文件中添加一个select节点复制代码
<!--查询用户列表--><select id="getUserList" resultType="com.ssms.pojo.User">SELECT * FROM USER</select>2).编写测试SqlSession sqlSession=null;List<User> userList=new ArrayList<User>();try{ sqlSession= MyBatisUtil.createSqlSession();userList=sqlSession.selectList("com.ssms.dao.user.UserMapper.getUserList");}catch (Exception ex){ ex.printStackTrace();}finally { MyBatisUtil.closeSqlSession(sqlSession);}for (User user : userList) { System.out.println(user.getUserName());}复制代码第二种使用方式:基于上面的Mapper配置文件复制代码
1).编写接口public interface UserMapper { /**复制代码
1.properties元素描述的都是外部化,可替代的属性1).通过外部文件获取属性值jdbc.driver=com.mysql.jdbc.Driverjdbc.user=rootjdbc.pwd=1234jdbc.url=jdbc:mysql://localhost:3306/<!--引入database.properties文件--><properties resource="database.properties"/>……<dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.user}"/><property name="password" value="${jdbc.pwd}"/></dataSource>2).直接配置为xml,再使用这些属性值<properties><property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>……</properties>……
<dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.pwd}"/>
</dataSource>注意:两种方式同时使用,外部的同名属性会覆盖propertie节点的值
复制代码
2.settings元素这个此处省略了
复制代码
3.typeAliases元素typeAliases元素的作用是配置类型别名示例:<typeAliases><!--给实体类起别名--><typeAlias type="com.ssms.pojo.User" alias="user"/></typeAliases>自动扫描JavaBean示例:<typeAliases><package name="com.ssms.pojo.User"/></typeAliases>那么UserMapper.xml修改如下<select id="getUserList" resultType="User">SELECT * FROM USER</select>复制代码复制代码4.environments元素用于配置多套环境,如开发环境、测试环境、生产环境等,需要明确选择当前唯一一个运行环境示例:<!--配置运行环境--><environments default="development"><environment id="development"><!--配置事务管理,采用JDBC的事务管理--><transactionManager type="JDBC"></transactionManager><!--POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.user}"/><property name="password" value="${jdbc.pwd}"/></dataSource></environment><environment id="test">……</environment></environments>复制代码复制代码5.mappers元素用来定义SQL的映射语句,告诉MyBatis去×××1).使用类资源路径获取资源<mappers><mapper resource="com/ssms/dao/user/UserMapper.xml"/></mappers>2).使用URL获取资源<mappers><mapper url="file:///E:/sqlmappers/UserMapper.xml"/></mappers>转载于:https://blog.51cto.com/13963248/2174969