一、持久化与ORM
持久化:是程序数据在瞬时状态和持久状态之间转换的过程被称之为持久化。 让对象的生存期超越使用对象的程序的运行期。
ORM: 对象关系映射,是一种数据化持久化技术。编写程序时,以面向对象的方式处理数据(对象);保存数据时,以关系型数据库方式存储数据(表)
二、框架的含义和好处
含义:
1. 是一个应用程序的半成品。
2.提供可重用的公共结构。
3. 按一定规则组织的一组组件。
好处:
1.不用再考虑公共性的问题。
2. 专心在业务实现上。
3.结构统一,易于学习,维护。
4. 新手也可以写出好程序。
三、MyBatis的构成
(1)SqlSessionFactoryBuilder(用过即丢)
SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建 SqlSessionFactory 的,通过它可以构建多个SessionFactory。它的作用仅仅是一个构建器而已,一旦我们构建了SessionFactory,那么它将毫无意义应立即回收!
(2)SqlSessionFactory(应用级别中) Spring
SqlSessionFactory的作用是创建SqlSession,而SqlSession相当于一个会话,相当于JDBC中的connection对象,每次应用程序需要访问数据库,我们就要通过SqlSessionFactory创建SqlSession,所以SqlSessionFactory应该在整个应用的生命周期中。而如果我们多次创建同一个数据库的 SqlSessionFactory,则每次创建的SqlSessionFactory会打开更多的数据库连接资源,那么连接资源很开会被耗尽,因此SqlSessionFactory的职责是 唯一的。果断的采取单例模式,在应用中使用同一个SqlSessionFactory对象即可。
(3)SqlSession(由于SqlSession是线程非安全的,每有一个事务操作开启一个新的 使用完之后及时关闭)
SqlSession是一个会话,相当于JDBC中的一个Connection对象,它的 生命周期应该是在请求数据库处理事务的过程中,且SqlSession是线程非安 全的对象,涉及多线程时要特别的当心,每次创建的SqlSession对象都要及时的关闭它,它长期存在就会使数据库连接池的活动资源减少,对系统性能影 响很大。
四、MyBatis简单的增删改查
1.导入节点依赖
<!--MyBatis的jar文件--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.32</version> </dependency>
2.在resources目录下创建mybatis-confiig.xml大配置文件
<?xml version="1.0" encoding="UTF-8"?> <!-- xml文件的头文件,起到对文件的约束作用(例如:必须存在哪些节点) --> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!--核心配置--> <!--引入jdbc配置,数据库核心的四要素--> <properties resource="jdbc.properties"/> <!--集成log4j配置--> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <!--配置别名--> <typeAliases> <!--方式一:单个别名--> <!--<typeAlias type="com.wdksoft.entity.user" alias="user"></typeAlias>--> <!--方式二:全局别名--> <package name="com.supermarket.entity"></package><!--这个包下的所有实体类的别名都是简写的类名--> <!--com.wdksoft.entity.user 别名为 user--> </typeAliases> <environments default="development"> <environment id="development"> <!--设置事务管理 采用JDBC事务 后续会将事务管理转移到Spring--> <transactionManager type="JDBC" /> <!-- 配置数据库连接信息 MyBatis自带的数据源 其它取值为UNPOOLED和JNDI --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers><!--管理我们配置的映射文件--> <mapper resource="com/supermarket/dao/ISmbmsUserDao.xml" ></mapper> </mappers> </configuration>
3.设置扫描路径和jdbc.properties
UserMapper.xml文件是保存在 com.cmy.dao包下的。但由于在idea中的java源码目录不能保存配置文件,所以需要在pom.xml中配置扫描目录。
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
jdbc.properties文件:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/smbms?useUniCode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=123
4.创建接口对应小配置
<?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"> <!--小配置根节点 namespace代表命名空间--> <mapper namespace="cn.mybatis.dao.IEasyBuyDao"> <!--select代表查询 内部存放查询语句 resultType返回数据格式类型--> <select id="getAllEBUser" resultType="cn.mybatis.entity.EasyBuyUser"> select * from easybuy_user </select> </mapper>
通过大配置关联小配置
<!--mappers关联小配置--> <mappers> <mapper resource="cn/mybatis/dao/IEasyBuyDao.xml"/> </mappers>
全局关联小配置
<mappers> <!--<mapper resource="cn/mybatis/dao/IEasyBuyDao.xml"/>--> <!--全局关联小配置--> <package name="cn.mybatis.dao"/> </mappers>
5.编写测试文件进行测试
@Test public void test01() throws IOException { String resource="mybatis-config.xml"; //步骤一:创建一个输入流,将xml文件以流的方式加载到内存 InputStream is = Resources.getResourceAsStream(resource); //步骤二:通过SqlSessionFactoryBuilder构建SqlSessionFactory工厂 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); //步骤三:通过SqlSessionFactory工厂获取SqlSession的SQL会话 SQL会话就是程序员必须要得到对象 SqlSession sqlSession = factory.openSession(); //步骤四:通过SqlSession执行增删改查等一系列方法 List<EasyBuyUser> easyBuyUser = sqlSession.selectList("getAllEBUser"); for (EasyBuyUser user:easyBuyUser) { System.out.println(user.getLoginName()); } //最后一步:关闭SqlSession释放资源 sqlSession.close(); }
五、MyBatis集成log4j
导入log4j依赖
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
在当前项目中导入log4j.properties配置文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=G:\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
###log4j.rootLogger=debug, stdout,file
log4j.logger.cn.mybatis.dao=debug, stdout,file
在mybatis配置文件中加入log4j配置
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
六、MyBatis框架getMapper
IEasyBuyDao mapper = sqlSession.getMapper(IEasyBuyDao.class); List<EasyBuyUser> easyBuyUser = mapper.getAllEBUser(); for (EasyBuyUser user:easyBuyUser) { System.out.println(user.getLoginName()); }
七、别名的设置
方法一:单独别名的设置
<typeAliases> <typeAlias type="cn.mybatis.entity.EasyBuyUser" alias="EasyBuyUser"/> </typeAliases>
方法二:全局别名的设置
<typeAliases> <package name="cn.mybatis.entity"/> </typeAliases>
八、resultMap的使用