免费图表制作网站,wordpress金馆长插件,会展网站的建设情况,建筑设计装修1. Mybatis简介
MyBatis下载地址
1.1 MyBatis历史
MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下#xff0c;iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github…1. Mybatis简介
MyBatis下载地址
1.1 MyBatis历史
MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到GithubiBatis一词来源于“internet”和“abatis”的组合是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access ObjectsDAO
1.2 MyBatis特性
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集MyBatis可以使用简单的XML或注解用于配置和原始映射将接口和Java的POJOPlain Old Java Objects普通的Java对象映射成数据库中的记录MyBatis 是一个 半自动的ORMObject Relation Mapping框架
1.3 和其它持久化层技术对比
JDBC SQL 夹杂在Java代码中耦合度高导致硬编码内伤维护不易且实际开发需求中 SQL 有变化频繁修改的情况多见代码冗长开发效率低 Hibernate 和 JPA 操作简便开发效率高程序中的长难复杂 SQL 需要绕过框架内部自动生产的 SQL不容易做特殊优化基于全映射的全自动框架大量字段的 POJO 进行部分映射时比较困难。反射操作太多导致数据库性能下降 MyBatis 轻量级性能出色SQL 和 Java 编码分开功能边界清晰。Java代码专注业务、SQL语句专注数据开发效率稍逊于HIbernate但是完全能够接受
2. 搭建MyBatis
2.1 开发环境
IDEidea 2019.2构建工具maven 3.5.4MySQL版本MySQL 5.7MyBatis版本MyBatis 3.5.7
代码结构如下 pojo/User.java
package com.atguigu.mybatis.pojo;public class User {private Integer id;private String username;private String password;private Integer age;private String sex;private String email;//这里省略了有参、无参构造、get、setter、重载toString
}2.2 pom.xml
打包方式jar引入依赖
pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.atguigu.mybatis/groupIdartifactIdMyBatis_demo1/artifactIdversion1.0-SNAPSHOT/versionpackagingjar/packagingdependencies!-- Mybatis核心 --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.7/version/dependency!-- junit测试 --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope/dependency!-- MySQL驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.28/version/dependency!-- log4j日志 --dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version/dependency/dependencies/project2.3 MyBatis核心配置文件mybatis-config.xml 习惯上命名为mybatis-config.xml这个文件名仅仅只是建议并非强制要求。将来整合Spring之后这个配置文件可以省略所以大家操作时可以直接复制、粘贴。 核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息 核心配置文件存放的位置是src/main/resources目录下 resources/mybatis-config.xml ?xml version1.0 encodingUTF-8 ?
!DOCTYPE configuration
PUBLIC -//mybatis.org//DTD Config 3.0//EN
http://mybatis.org/dtd/mybatis-3-config.dtd
configuration !--设置连接数据库的环境-- environments defaultdevelopment environment iddevelopment transactionManager typeJDBC/ dataSource typePOOLED property namedriver valuecom.mysql.cj.jdbc.Driver/ property nameurl valuejdbc:mysql://localhost:3306/MyBatis/ property nameusername valueroot/ property namepassword value123456/ /dataSource /environment /environments !--引入映射文件-- mappers mapper resourcemappers/UserMapper.xml/ /mappers
/configuration2.3.1 核心配置文件详解 核心配置文件中的标签必须按照固定的顺序(有的标签可以不写但顺序一定不能乱) properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers ?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--MyBatis核心配置文件中标签的顺序properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?--!--引入properties文件--properties resourcejdbc.properties /!--设置类型别名--typeAliases!--typeAlias设置某个类型的别名属性type设置需要设置别名的类型alias设置某个类型的别名若不设置该属性那么该类型拥有默认的别名即类名且不区分大小写--!--typeAlias typecom.atguigu.mybatis.pojo.User/typeAlias--!--以包为单位将包下所有的类型设置默认的类型别名即类名且不区分大小写--package namecom.atguigu.mybatis.pojo//typeAliases!--environments配置多个连接数据库的环境属性default设置默认使用的环境的id--environments defaultdevelopment!--environment配置某个具体的环境属性id表示连接数据库的环境的唯一标识不能重复--environment iddevelopment!--transactionManager设置事务管理方式属性typeJDBC|MANAGEDJDBC表示当前环境中执行SQL时使用的是JDBC中原生的事务管理方式事务的提交或回滚需要手动处理MANAGED被管理例如Spring--transactionManager typeJDBC/!--dataSource配置数据源属性type设置数据源的类型typePOOLED|UNPOOLED|JNDIPOOLED表示使用数据库连接池缓存数据库连接UNPOOLED表示不使用数据库连接池JNDI表示使用上下文中的数据源--dataSource typePOOLED!--设置连接数据库的驱动--property namedriver value${jdbc.driver}/!--设置连接数据库的连接地址--property nameurl value${jdbc.url}/!--设置连接数据库的用户名--property nameusername value${jdbc.username}/!--设置连接数据库的密码--property namepassword value${jdbc.password}//dataSource/environmentenvironment idtesttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/myDB/property nameusername valueroot/property namepassword valueroot//dataSource/environment/environments!--引入映射文件--mappers!--mapper resourcemappers/UserMapper.xml/--!--以包为单位引入映射文件要求1、mapper接口所在的包要和映射文件所在的包一致2、mapper接口要和映射文件的名字一致--package namecom.atguigu.mybatis.mapper//mappers
/configurationresources/jdbc.properties
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/myDB
jdbc.usernameroot
jdbc.passwordroot默认的类型别名 2.4 创建mapper接口UserMapper.java MyBatis中的mapper接口相当于以前的dao。但是区别在于mapper仅仅是接口我们不需要提供实现类 mapper/UserMapper.java package com.atguigu.mybatis.mapper;import com.atguigu.mybatis.pojo.User;import java.util.List;public interface UserMapper {/*** MyBatis面向接口编程的两个一致* 1、映射文件的namespace要和mapper接口的全类名保持一致* 2、映射文件中SQL语句的id要和mapper接口中的方法名一致** 表--实体类--mapper接口--映射文件*//*** 添加用户信息*/int insertUser();/*** 修改用户信息*/void updateUser();/*** 删除用户信息*/void deleteUser();/*** 根据id查询用户信息*/User getUserById();/*** 查询所有的用户信息*/ListUser getAllUser();}2.5 创建MyBatis的映射文件UserMapper.xml
相关概念ORMObject Relationship Mapping对象关系映射。对象Java的实体类对象 关系关系型数据库映射二者之间的对应关系
Java概念数据库概念类表属性字段/列对象记录/行
映射文件的命名规则
表所对应的实体类的类名Mapper.xml例如表t_user映射的实体类为User所对应的映射文件为UserMapper.xml因此一个映射文件对应一个实体类对应一张表的操作MyBatis映射文件用于编写SQL访问以及操作表中的数据MyBatis映射文件存放的位置是src/main/resources/mapper目录下MyBatis中可以面向接口操作数据要保证两个一致mapper接口的全类名和映射文件的命名空间namespace保持一致mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致
resources/mapper/UserMapper.xml
2.5.1 增
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.atguigu.mybatis.mapper.UserMapper!--int insertUser();--insert idinsertUserinsert into t_user values(null,admin,123456,23,男,12345qq.com)/insert/mapper2.5.2 改 !--void updateUser();--update idupdateUserupdate t_user set username 张三 where id 4/update2.5.3 删 !--void deleteUser();--delete iddeleteUserdelete from t_user where id 5/delete2.5.4 查 !--User getUserById();--!--查询功能的标签必须设置resultType或resultMapresultType设置默认的映射关系resultMap设置自定义的映射关系--select idgetUserById resultTypecom.atguigu.mybatis.pojo.Userselect * from t_user where id 3/select!--ListUser getAllUser();--select idgetAllUser resultTypeUserselect * from t_user/select1. 查询的标签select必须设置属性resultType或resultMap用于设置实体类和数据库表的映射关系 - resultType自动映射用于属性名和表中字段名一致的情况 - resultMap自定义映射用于一对多或多对一或字段名和属性名不一致的情况
2. 当查询的数据为多条时不能使用实体类作为返回值只能使用集合否则会抛出异常TooManyResultsException但是若查询的数据只有一条可以使用实体类或集合作为返回值2.6 通过junit测试功能 SqlSession代表Java程序和数据库之间的会话。HttpSession是Java程序和浏览器之间的会话 SqlSessionFactory是“生产”SqlSession的“工厂”
test/MyBatisTest.java
package com.atguigu.mybatis.test;import com.atguigu.mybatis.mapper.UserMapper;
import com.atguigu.mybatis.pojo.User;
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 org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class MyBatisTest {/*** SqlSession默认不自动提交事务若需要自动提交事务* 可以使用SqlSessionFactory.openSession(true);*/Testpublic void testMyBatis() throws IOException {//加载核心配置文件InputStream is Resources.getResourceAsStream(mybatis-config.xml);//获取SqlSessionFactoryBuilderSqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();//获取sqlSessionFactorySqlSessionFactory sqlSessionFactory sqlSessionFactoryBuilder.build(is);//获取SqlSessionSqlSession sqlSession sqlSessionFactory.openSession(true);//获取mapper接口对象UserMapper mapper sqlSession.getMapper(UserMapper.class);//测试功能int result mapper.insertUser();//提交事务//sqlSession.commit();System.out.println(result:result);}Testpublic void testCRUD() throws IOException {InputStream is Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession sqlSessionFactory.openSession(true);UserMapper mapper sqlSession.getMapper(UserMapper.class);//mapper.updateUser();//mapper.deleteUser();/*User user mapper.getUserById();System.out.println(user);*/ListUser list mapper.getAllUser();list.forEach(user - System.out.println(user));
}}此时需要手动提交事务如果要自动提交事务则在获取sqlSession对象时使用SqlSession sqlSession sqlSessionFactory.openSession(true);传入一个Boolean类型的参数值为true这样就可以自动提交
2.7 加入log4j日志功能 加入依赖 !-- log4j日志 --
dependency
groupIdlog4j/groupId
artifactIdlog4j/artifactId
version1.2.17/version
/dependency加入log4j的配置文件 log4j的配置文件名为log4j.xml存放的位置是src/main/resources目录下日志的级别FATAL(致命)ERROR(错误)WARN(警告)INFO(信息)DEBUG(调试) 从左到右打印的内容越来越详细 ?xml version1.0 encodingUTF-8 ?
!DOCTYPE log4j:configuration SYSTEM log4j.dtd
log4j:configuration xmlns:log4jhttp://jakarta.apache.org/log4j/appender nameSTDOUT classorg.apache.log4j.ConsoleAppenderparam nameEncoding valueUTF-8 /layout classorg.apache.log4j.PatternLayoutparam nameConversionPattern value%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n //layout/appenderlogger namejava.sqllevel valuedebug //loggerlogger nameorg.apache.ibatislevel valueinfo //loggerrootlevel valuedebug /appender-ref refSTDOUT //root
/log4j:configuration