命名规范
- 项目名:没有要求
- 包名:域名倒写,com.domain.***
- 数据库访问层:dao,persist,mapper
- 实体:entity,model,bean,javabean,pojo
- 业务逻辑:service,biz
- 控制器:controller,servlet,action,web
- 过滤器:filter
- 异常:exception
- 监听器:listener
- 注释:
10.1 类上和方法上使用文档注释 /** /
10.2 在方法里面使用/ */ 或 // - 类:大驼峰
- 方法、属性:小驼峰
MVC开发模式
-
M:Mode 模型。实体类、业务和dao。
-
V:view 视图。JSP
-
C:Controller 控制器。servlet
3.1 作用:视图和逻辑分离 -
MVC适用场景:大型项目开发。越往底层,复用越高
-
示例图:
5.1 设计数据库
5.2 先写实体类
5.3 持久层
5.4 业务逻辑
5.5 控制器
5.6 视图
框架是什么?
- 框架:软件的半成品,为解决问题制定的一套约束,在提供功能的基础上扩充。
- 框架中一些不能被封装的代码(变量),需要使用框架者新建一个xml文件,在文件中添加变量内容。
2.1 需要建立特定位置和特定名称的配置文件
2.2 需要使用XML解析技术和反射技术 - 常用概念
3.1 类库:提供的类没有封装一定逻辑。 举例:类库就是名言警句,写作文时引入。
3.2 框架:区别于类库,里面有一些约束。 举例:框架是填空题。
MyBaits简介
- 开源免费框架。原名:iBatis。
- 作用:数据访问层框架。
2.1 底层是JDBC的封装 - mybaits优点之一:
3.1 使用mybatis时不需要编写实现类,只需要写执行的sql命令
环境搭建
- 导入jar
asm cglib依赖的包
cglib 动态代理包
commons 日志包
javassist 字节码解析包 cglib依赖的包
log4j 日志包
slf4j 日志包
mybatis 核心包
mysql 驱动包 - 在src下新建全局配置文件(编写JDBC四个变量)
2.1 没有名称和地址要求
2.2 在全局配置文件中引入DTD或Schema
2.3 全局配置文件内容
<?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>
<!-- default引用environment的id,当前所使用的环境 -->
<environments default="default">
<environment id="default">
<!-- 使用原生JDBC事务 -->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="mysqlUser001"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/sxt/mapper/FlowerMapper.xml"/>
</mappers>
</configuration>
- 新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml
3.1 文件作用:编写需要执行的sql命令
3.2 把xml文件理解成实现类
3.3 xml文件内容
<?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="com.sxt.FlowerMapper">
<!-- id:方法名
parameterType:定义参数类型
resultType:返回值类型
如果方法返回值是list,在resultType中写List的泛型,因为mybatis
对JDBC封装,逐行读取数据。
-->
<select id="selAll" resultType="com.sxt.pojo.Flower">
select * from flower
</select>
</mapper>
- 测试结果(只有在单独使用mybatis时使用,最后ssm整合时,下面代码不需要编写)
//在数据访问层处理异常和在控制器中处理异常,service中抛出异常
InputStream is=Resources.getResourceAsStream("mybatis.xml");
//前面是工厂设计模式 实例化工厂对象时使用构建者设计模式 名称标识:后面有Builder
//构建者设计模式存在的意义,简化对象实例化过程
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
//生产SqlSession
SqlSession session=factory.openSession();
List<Flower> list=session.selectList("com.sxt.FlowerMapper.selAll");
for(Flower flower:list) {
System.out.println(flower.toString());
}
session.close();
- 思考:
<select id="selAll" resultType="com.sxt.pojo.Flower">
select * from flower
</select>
此处:
5.1 resultType为什么不是集合而是实体?—>因为mybatis时对JDBC封装的,rs.next一次只能读取一行(游标移动)
5.2 如何将查询出来的列与com.sxt.pojo.Flower类中的属性对应起来?---->反射,找到对应列名的属性(Auto Mapping),故实体类中的 属性要与列名一致;若不一致,则通过别名控制:修改语句为select filed1 name,field2 from flower,其中name为实体类中的属性名
环境搭建详解
- 全局配置文件中内容:
1.1 <transactionManager\ ></transactionManager> type属性可取值:
1.1.1 JDBC,事务管理使用JDBC原生事务管理方式
1.1.2 MANAGED,把事务管理转交给其他容器(例如:Spring),也就是setAutoMapping(false) 关闭事务自动提交。
1.2 <dataSource ></dataSource >type属性可取值(数据库连接池存在意义–>提升系统运行效率):
······1.2.1 POOLED 使用数据库连接池
······1.2.2 UNPOOLED 不使用数据库连接池,和直接使用JDBC一样
······1.2.3 JNDI JAVA命名目录接口技术(调用程序技术)
数据库连接池
- 在内存中开辟一块空间,存放多个数据库连接对象。
- JDBC Tomcat Pool ,直接由tomcat产生数据库连接池
- 图示
3.1 active状态:当前连接对象被应用程序使用中
3.2 Idle状态:空闲状态,等待应用程序使用
3.3 通过设计两种连接状态,避免不同应用程序同时使用同一个连接对象时,要么拒绝 要么排队的问题,提高效率。
- 使用数据库连接池的目的:
4.1 在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升运行效率
······4.1.1 小型项目不适用数据库连接池 - 实现JDBC Tomcat Pool的步骤
5.1 在web项目的META-INF中存放context.xml,在context.xml中编写相关属性
5.2 把项目发布到tomcat中,数据库连接池就产生了。
5.3 auth : Container表示由tomcat管理
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/ssm"
username="mysqlUser001"
password="123456"
maxActive="50"
maxIdle="20"
name="test"
auth="Container"
maxWait="10000"
type="javax.sql.DataSource"
/>
</Context>
- 可以在JAVA中使用JNDI获取数据库连接池对象
6.1 Context:上下文接口,其实就是context.xml文件对象类型
6.2 当关闭连接对象时,把数据库连接对象归还给数据库连接池,把状态改为Idle。
6.3 代码