Java框架学习day1--MayBatis框架

数据库创建

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);

本期学习到此结束,欢迎大家关注交流。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值