数据库创建
Create database bamboo default character set utf8;
Create table flowers(
id int(10) PRIMARY key auto_increment comment '编号',
name varchar(30) not null comment '花名',
price float not null comment '价格',
production varchar(30) not null comment '原产地'
);
运行结果:
命名规范
1、项目名:不要使用中文
2、包:公司域名倒写:com.xiaokeai
3、数据访问层:DAO,persist,mapper
4、实体:entity,model,bean,javabean,pojo
5、业务逻辑:service,biz
6、控制器:controller,servlet,action,web
7、过滤器:filter
8、异常:exception
9、监听器:listener
10、注释:
(1)类上与方法上使用文档注释/**/
(2)在方法里使用/* *或者//
11、类:大驼峰
12、方法:小驼峰
MVC开发模式
1、M:Model模型,实体类和业务和dao
2、V:View视图,JSP
3、C:Controller控制器,servlet
作用:视图和逻辑分离
4、MVC使用场景:大型项目开发
5、图示例:
(1)先设计数据库
(2)先写实体类
(3)持久类
(4)控制器
(5)视图
V:视图
C:控制器
Service:业务逻辑
DAO:数据库访问对象
DB:数据库访问对象
开始编程
(1)文件结构如下所示:
文件链接如下:
(2)jsp文件:
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!-- 官方命名为c -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1px">
<tr>
<th>花卉编号</th>
<th>花卉名称</th>
<th>花卉价格</th>
<th>花卉产地</th>
</tr>
<c:if test="${not empty list }">
<c:forEach items="${list }" var="flower"><!-- items迭代参数,var迭代变量 -->
<!-- 获取flower的各项信息 -->
<tr>
<td>${flower.id }</td>
<td>${flower.name }</td>
<td>${flower.price }</td>
<td>${flower.production }</td>
</tr>
</c:forEach>
</c:if>
</table>
<a href="add.jsp">添加花卉信息</a>
</body>
</html>
add.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
<!--
页面加载完成后执行
相当于:window.onload=function(){} $(document).ready(function(){});
//-->
$(function () {
$("form").submit(function() {
//表单选择器,:input标签type属性值
if($(":text:eq(0)").val()==""||$(":text:eq(1)").val()==""||$(":text:eq(2)").val()==""){//val只有form表单的子标签有
alert("请添加完整信息");
//阻止默认行为
return false;
}
});
});
</script>
</head>
<body>
<!-- post和get的区别
post:字节流 2GB 更安全 效率低
get:字符流 2KB 不安全 效率高
-->
<form action="insert" method="post">
<table border="1" align="center">
<tr>
<td colspan="2" style="text-align: center;font-size: 30px;font-weight: bold">
花卉信息
</td>
</tr>
<tr>
<td><b>花名:</b></td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td><b>价格:</b></td>
<td><input type="text" name="price"></td>
</tr>
<tr>
<td><b>产地:</b></td>
<td><input type="text" name="production"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交">
<input type="submit" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
(3)
(4)运行结果如图所示:
添加花卉信息:
框架介绍
框架的学习就是学会如何去解决错误。
框架是什么?
1、框架:软件的半成品,未解决问题制定的一套约束,在提供功能基础上进行扩充。
2、框架中一些不能被封装的代码(变量),需要使用框架进行或者新建一个xml文件,在文件中添加这些变量内容。
(1)需要建立特定位置和特定名称的文件
(2)需要使用的是xml解析技术和反射技术
3、常用概念
(1)类库:提供的类没有封装一定逻辑。
栗子:类库就是名人警句,写作文时引入名言警句。
(2)框架:区别于类库,里面包含一些约束。
栗子:框架是填空题。
MyBatis简介
1、MyBatiss:开源的免费框架,2013年迁移到github
2、作用:数据访问层框架
(1)底层是针对JDBC的封装
3、优点:
(1)使用MyBatis时不需要编写实现类,只需要写需要执行的sql命令。
MyBatis环境搭建
1、导入jar包
2、在src下新建全局配置文件(编写JDBC四个变量)
(1)没有名称和地址要求
(2)在全局配置文件中引入DTD或 schema
①如果导入dtd后没有提示
window-->preference-->xml-->add
②全局配置文件内容
myXML.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>
<!-- default表明引用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/flower"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment><!-- 连接mysql -->
</environments>
<mappers>
<mapper resource="com.jc/mapper/FlowerMapper"/>
</mappers>
</configuration>
3、新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml
(1)文件作用:编写需要执行的sql命令
(2)把xml文件理解成是实现类
(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">
<!-- 把namesapce:理解成实现类的全路径(包名+类名) -->
<mapper namespace="one.two">
<!--id就是方法名
parameterType:实现参数类型
resultType:返回值类型,
如果方法返回值时list,在resultType中需要些list的泛型,因为Mybatis对jdbc封装,一行一行进行读取数据值-->
<select id="selAll" resultType="com.jc.pojo.Flower">
select * from flower
</select>
</mapper>
4、测试结果(只有在单独使用mybatis时使用,最后ssm整合时下面的代码可以进行省略)
/**
*
*/
package com.jc.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionException;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.jc.pojo.Flower;
/**
* @author JC.Liu
*
* 2019年9月22日-上午9:38:21
*/
public class Test {
public static void main(String[] args) throws IOException {
InputStream is =Resources.getResourceAsStream("myXML.xml");
//工厂设计模式
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
//生产SqlSession
SqlSession session=factory.openSession();
List<Flower> list=session.selectList("one.two.selAll");
for(Flower flower:list) {
System.out.println(flower.toString());
}
session.close();
}
}
环境搭建详解
1、全局配置文件中的内容
(1)<trasnsactionManager>
在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”):
- JDBC (事务管理使用jdbc原生管理方式)– 这个配置直接简单使用了 JDBC 的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
- MANAGED(把事务管理转交给其他容器,原生jdbc事务setAutoMapping(false)) – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如 Spring 或 JEE 应用服务器的上下文) 默认情况下它会关闭连接。然而一些容器并不希望这样, 因此如果你需要从连接中停止它,将 closeConnection 属性设置为 false。
(2)<dataSource >type属性
dataSource 元素使用基本的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
UNPOOLED(不使用数据库连接池) – 这个数据源的实现是每次被请求时简单打开和关闭连接。它有一点慢, 这是对简单应用程序的一个很好的选择, 因为它不需要及时的可用连接。不同的数据库对这个的表现也是不一样的, 所以对某些数据库来说配置数据源并不重要, 这个配置也是闲置的。
POOLED(使用数据库连接池) – 这是 JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。这是一种当前 Web 应用程序用来快速响应请求很流行的方法。
JNDI (java的命名目录接口技术)– 这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器, 容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
数据库连接池
1、在内存中开辟一块空间,存放多个数据库连接对象。
2、JDBC Tomcat Pool,直接由Tomcat产生数据库连接池。
3、状态:
(1)Activate:当前连接对象被应用程序所使用中
(2)Idel空闲状态:等待应用程序使用
4、使用数据库连接池的目的
(1)在高频率访问数据库时,使用数据库连接池可以降低服务器系统的压力,提升程序运行效率。
小型项目不适用数据库连接池
5、实现JDBC Tomcat Pool的步骤
(1)在web项目的meta-inf中存放context.xml文件,再在里面编写数据库连接池相关代码
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/flower"
username="root"
password=""
maxActive="50"
maxIdle="20"
name="test"
auth="Container"
maxWaite="10000"
type="javax.sql.DataSource"
/>
</Context>
(2)把项目发布到Tomcat中,数据库连接池就产生了
6、可以在java中使用jndi获取数据库连接池中的对象
(1)Context:上下文接口,context.xml文件对象类型
(2)代码:
Context cxt = new InitialContext();
DataSource ds = (DataSource)
cxt.lookup("java:comp/env/test");
Connection conn = ds.getConnection();
3、当关闭连接对象时,把连接对象归还给数据库连接池,把状态改变成Idle
三种查询方式
1、selectList() 返回值为List<resultType 属性控制>
(1)适用于查询结果都需要遍历的需求
List<Flower> list = session.selectList("a.b.selAll");
for (Flower flower : list) {
System.out.println(flower.toString());
}
2、selectOne() 返回值为object
(1)适用于返回结果只是变量或一行数据时
int count = session.selectOne("a.b.selById");
System.out.println(count);
3、selectMap()返回值Map
(1)适用于需要在查询结果通过某列的值取到这行数据的需求
(2)Map<key,resultType 控制>
Map<Object, Object> map = session.selectMap("a.b.c",
"name123");
System.out.println(map);
本期学习到此结束,欢迎大家关注交流。