使用SSM框架开发企业级应用初级笔记
******************第一章*******************
框架技术
是一个应用程序的半成品
提供可重用的公共结构
按一定规则组织的一组组件
分析优势
不用再考虑公共问题
专心在业务实现上
结构统一,易于学习、维护
新手也可写出好程序
持久化是程序数据在瞬时状态和持久状态间转换的过程
使用MyBatis的开发步骤
下载mybatis-3.2.2.jar包并导入工程
编写MyBatis核心配置文件(configuration.xml)
创建实体类-POJO
DAO层-SQL映射文件(mapper.xml)
创建测试类
读取核心配置文件mybatis-config.xml
创建SqlSessionFactory对象,读取配置文件
创建SqlSession对象
调用mapper文件进行数据操作
MyBatis框架优缺点
优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架,小巧并简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签,支持编写动态SQL
提供映射标签,支持对象与数据库的ORM字段映射
缺点
SQL语句编写工作量大,对开发人员有一定要求
数据库移植性差
MyBatis的核心对象
SqlSessionFactoryBuilder
丨build()
丨
SqlSessionFactory
丨openSession()
丨
SqlSession
mybatis-config.xml 系统核心配置文件
SqlSessionFactoryBuilder
用过即丢,其生命周期只存在于方法体内
可重用其来创建多个 SqlSessionFactory 实例
负责构建SqlSessionFactory,并提供多个build方法的重载
SqlSessionFactory
SqlSessionFactory是每个MyBatis应用的核心
作用:创建SqlSession实例
作用域:Application
生命周期与应用的生命周期相同
单例:存在于整个应用运行时,并且同时只存在一个对象实例
SqlSession
包含了执行SQL所需的所有方法
对应一次数据库会话,会话结束必须关闭
线程级别,不能共享
小结
非集成环境下的最佳实践
SqlSessionFactoryBuilder
用过即丢,推荐作用域范围:方法体内
SqlSessionFactory
最佳作用域范围:应用的全局作用域
生命周期与应用的生命周期相同
SqlSession
线程级
一个request请求期间
mybatis-config.xml 系统核心配置文件
configuration 配置
properties 可以配置在Java 属性配置文件中
settings 修改 MyBatis 在运行时的行为方式
typeAliases 为 Java 类型命名一个别名(简称)
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
mappers 映射器
配置properties元素的两种方式
通过外部指定的方式(database.properties),实现动态配置 《用的多》
例:
<properties resource="database.properties"/>
......
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
直接配置为xml,实现动态配置
例:
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</properties>
......
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
外部指定高于直接配置
第一章具体示例
<configuration>
<properties resource="database.properties"></properties> //指定外部文件名
<settings> //Log4g配置 固定
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases> //实体类不用指定完全限定名,name指到包就行了
<package name="entity"/>
</typeAliases>
<environments default="development"> //可以写多个配置,defuault默认配置名
<environment id="development"> //此配置名称
<transactionManager type="JDBC"/> //事务管理器配置
<dataSource type="POOLED"> //有三种POOLED使用Mybatis自带数据库连接池来管理数据库连接,UNPOOLED不使用任何数据库连接池来管理数据库连接,JNDI JNDI形式使用数据库连接,主要用于项目正常使用的时候
<property name="driver" value="${driver}"/> //外部指定的文件内容读取
<property name="url" value="${url}"/>
<property name="username" value="${userName}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers> //所要映射的文件
<mapper resource="dao/IUsersDaoMapper.xml"/>
<mapper resource="dao/IStuMap.xml"/>
</mappers>
<transactionManager type="[ JDBC || MANAGED ]" /> //事物管理机制 JDBC管理事物方式或者MANAGED WEB容器管理事物方式
</configuration>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
******************第六章*******************
常用增强处理类型
定义切面
******************第十章*******************
懒汉模式和饿汉模式区别
注意: 在整个程序运行期间,有且仅有一个实例。
若违背这一点,所设计的类就不是单例类
@RequestParam(value="参数名" required="boolean") String 参数名 ||
//获取上一页面传过来的值 等价于 request.getParameter("参数名") value是固定传来的参数名
required是boolean值 表示是否一定要传值过来