为何使用框架
https://www.cnblogs.com/Djkang/p/9626708.html
框架的优点以下: 1.不用再考虑公共问题,框架已经帮咱们作好了。 2.能够专心用于业务逻辑,保证核心业务逻辑的开发质量。 3.结构统一,便于学习和维护。 4.框架中继承了前人的经验,能够帮助新手写出稳定、性能优良并且结构优美的高质量程序。html
什么是框架 框架(Framework)是一个提供了可重用的公共结构的半成品。 框架就是应用程序的“骨架”,开发者能够在这个骨架上加入本身的东西。java
2.MyBatis介绍及其环境搭建mysql
MyBatis前身是iBatis,本是Apache的一个开源的项目 ORM框架 实体类和SQL语句之间创建映射关系 特色 基于SQL语法,简单易学 能了解底层封装过程 SQL语句封装在配置文件中,便于统一管理与维护,下降程序的耦合度 方便程序代码调试git
什么是数据持久化 数据持久化就是将内存中的数据模型转换为存储模型,已经将存储模型转换为内存中的数据模型的统 称。github
什么是ORM ORM(Object/Relational Mapping)即对象/关系映射,是一种持久化技术。 在对象模型和关系数据库模型之间创建起对应关系,而且提供了一种机制,经过JavaBean对象去操做 数据库表中的数据。 MyBatis经过简单的XML或者注解进行配置和原始映射,将实体类和SQL语句之间创建映射,是一种半 自动化的ORM实现。sql
MyBatis环境搭建数据库
1.下载jar包 进入官方网站下载:mybatis.org 或者 https://github.com/mybatis/mybatis-3tomcat
下载好的jar包解压如图所示安全
lib目录中存放着编译依赖包,各依赖文件说明以下:mybatis
2.部署jar文件到项目中 3.建立MyBatis核心配置文件mybatis-config.xml MyBatis核心配置文件主要用于配置数据库链接和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 configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" <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.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.user=root jdbc.pwd=1234 jdbc.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; //id private 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 mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<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:映射文件的根元素节点,只有一个属性namespace namespace:用于区分不一样的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.xml String resource="mybatis-config.xml"; //获取mybatis-config.xml文件的输入流 InputStream is= Resources.getResourceAsStream(resource); //2.建立SqlSessionFactory对象 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); //建立SqlSession int 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最大特色是用过即丢 SqlSessionFactory 1.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(); } }
} 复制代码 SqlSession 1.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 { /**
- 获取用户列表
- @return */ List<User> getUserList(); } 2).编写测试 SqlSession sqlSession=null; List<User> userList=new ArrayList<User>(); try{ sqlSession= MyBatisUtil.createSqlSession(); userList=sqlSession.getMapper(UserMapper.class).getUserList(); }catch (Exception ex){ ex.printStackTrace(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } for (User user : userList) { System.out.println(user.getUserName()); } 注意推荐使用第二种方式 复制代码 4.MyBatis的基本要素——核心配置文件
复制代码 1.properties元素 描述的都是外部化,可替代的属性 1).经过外部文件获取属性值 jdbc.driver=com.mysql.jdbc.Driver jdbc.user=root jdbc.pwd=1234 jdbc.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>