001知识回顾(SQL、Eclipse、命名、MVC)+MyBatis环境搭建+数据库连接池+三种查询方式

一.知识回顾

SQL复习

--创建数据库并编码
create database 数据库名 default character set utf8
--创建表
create table 表名 (
列名 类型 约束 auto_increment comment'备注',
);

Eclipse的使用

Target runtime在建立Web项目时一定要选择,相当于在myeclipse中导入javaee6.0那个包。如果不选,新建jsp会报错,和servlet有关的全部报错,选择的话选择tomcat主目录即可。后期也可以通过项目右键-Build Path-Configure Build Path-Libraries-Add Library-Server Runtime添加。

Eclipse默认会自己 下载所需tomcat最简单结构Servers项目。server.xml可以配置端口,web.xml可以配置session时间等。一般新生成的文件夹在.metadata\.plugins\org.eclipse.wst.server.core\tmp0下。

调字体,Window-Preferences-General-Colors and Font-Text Font。调编码格式,Window-Preferences-General-Workspace。

命名规范

项目名没有要求,不起中文。包名是公司域名倒写,com.ld:持久层dao、persist、mapper;实体类entity、model、bean、javabean、pojo;业务逻辑service、biz;控制器controller、servlet、action、web;过滤器filter;异常exception;监听器listener;注释在 类和方法上使用文档注释/** */,在方法里面使用/* */ //。类命名使用大驼峰。方法和属性命名使用小驼峰。

MVC开发模式

M Model 模型 实体类、业务和dao。V view 视图 JSP。C controller 控制器 servlet 用于视图和逻辑分离。

MVC适用场景:大型项目开发。

开发顺序:先设计数据库、然后写实体类、持久层、业务逻辑、控制器、视图。

二.MyBatis环境搭建

框架介绍

软件的半成品,未解决问题制定的一套约束,在提供功能基础上进行扩充。框架中一些不能被封装的代码(变量),需要使用框架者细腻建一个xml文件,在文件中添加变量内容。①需要在特定位置和特定名称德配置文件。②需要使用xml解析技术上和反射技术。

类库,提供的类没有封装一定逻辑,就像名言警句,写作文的时候需要引入。框架,里面有一些约束,像填空题。

MyBatis简介

开源免费的框架,原名叫iBatis,2010在google code,2013移到github。作用是数据访问层框架,底层是对JDBC的封装。

MyBatis优点之一:使用MyBatis时不需要编写实现类,只需要写需要执行的sql命令。   

MyBatis环境搭建

先导入jar包,建议建立一个web项目,直接将jar包放进lib文件夹即可。

在src下新建全局配置文件(编写JDBC四个变量),没有名称和地址要求,在全局配置文件中引入DTD或schema,XML语法检查器,限制XML文件所写的东西,如果导入DTD后没有提示,Window-preference-XML-XML catalog-add按钮,添加DTD文件位置和keyhttp://mybatis.org/dtd/mybatis-3-config.dtd

环境搭配详解:<transactionManager/>中type属性可取值①JDBC,事务管理使用JDBC原生事务管理方式②MANAGED,把事务管理交给其它容器,原生JDBC事务setAutoMapping(false);<dataSource/>type属性可取值①POOLED,使用数据库连接池②UNPLOOED,不使用数据库连接池,和直接使用JDBC一样。③JNDI,java目录命名接口技术,用于调用其他语言写的东西。

<!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="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="com/bjsxt/mapper/FlowerMapper.xml"/>
	</mappers>
</configuration>

在mybatis.xml中还可以配置以下信息:

开启日志功能

<settings>
		<setting name="logImpl" value="LOG4J"/>
</settings>

系统内置别名是把类型全部小写,给实体类起别名

<typeAliases>
		<typeAlias type="com.ld.pojo.Student" alias="stu"/>
</typeAliases>

给包下所有类起别名,别名为实体类类名

<typeAliases>
	<package name="com.bjsxt.pojo" />
</typeAliases>

注意:导入的数据库连接包比较高的话可以使用这个,jdbc:mysql://localhost:3306/people?serverTimezone=GMT%2B8

新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml。文件的作用是编写需要执行的SQL命令。把xml文件理解成实现类。 

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namesapce:理解成实现类的全路径(包名+类名) -->
<mapper namespace="a.b" >
	<!-- id:方法名 
		parameterType:定义参数类型
		resultType:返回值类型.
		
		如果方法返回值是list,在resultType中写List的泛型,因为mybatis
		对jdbc封装,一行一行读取数据
	-->
	<select id="selAll" resultType="com.bjsxt.pojo.Flower"> //使用的是泛型里面的类型
		select * from flower
	</select>
</mapper>

测试结果

过程中 想查看DefaultSqlSessionFactory类的内容可以关联源码,选择External location。

public class Test {
	public static void main(String[] args) throws IOException {
		InputStream is = Resources.getResourceAsStream("myabtis.xml");
		//使用工厂设计模式
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		//生产SqlSession
		SqlSession session=factory.openSession();
		
		List<Flower> list = session.selectList("a.b.selAll");
		for (Flower flower : list) {
			System.out.println(flower.toString());
		}
		
		session.close();
	}
}

注意:查出来的字段名必须和实体类中的名字一样方便完成自动映射,如果不一样需要起别名,有别名优先走别名。

三.数据库连接池

在内存中开辟一块空间,存放多个数据库连接对象。JDBC Tomcat Pool,直接由tomcat产生数据库连接池。active状态,当前连接对象被应用程序使用中,idle空闲状态,等待程序使用。在高频访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率,小型项目不适合使用数据库连接池。

实现JDBC Tomcat Pool的步骤①在web项目的META-INF中存放context.xml,在context-xml中编写数据库连接池相关属性。②把项目发布到tomcat中,数据库连接池产生了。

<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<Resource
		driverClassName="com.mysql.jdbc.Driver"
		url="jdbc:mysql://localhost:3306/ssm"
		username="root"
		password="smallming"
		maxActive="50"
		maxIdle="20"
		name="test"
		auth="Container"
		maxWait="10000"
		type="javax.sql.DataSource"
	/>
</Context>

可以在java中使用jndi获取数据库连接池中对象:①Context上下文接口,context.xml文件对象类型。②当关闭连接对象时,把连接对象归还给数据库连接池,把状态改变成idle。

@WebServlet("/pool")
public class DemoServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		try {
			Context cxt = new InitialContext();
			DataSource ds = (DataSource) cxt.lookup("java:comp/env/test");
			Connection conn = ds.getConnection();
			PreparedStatement ps = conn.prepareStatement("select * from flower");
			ResultSet rs = ps.executeQuery();
			res.setContentType("text/html;charset=utf-8");
			PrintWriter out = res.getWriter();
			while(rs.next()){
				out.print(rs.getInt(1)+"&nbsp;&nbsp;&nbsp;&nbsp;"+rs.getString(2)+"<br/>");
			}
			out.flush();
			out.close();
			rs.close();
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

四.三种查询方式

①selectList()返回值为List<resultType属性控制>,适用于查询结果都需要遍历的需求。②selectOne()返回值Object,适用于返回结果只是变量或一行数据时。③selectMap()返回值Map,适用于需求需要在 查询结果中通过某列的值取到这行数据的需求,Map<key,resultMap控制>。

	<select id="selAll" resultType="com.bjsxt.pojo.Flower">
		select id,name name123,price,production from flower
	</select>
	
	<select id="selById" resultType="int">
		select count(*) from flower
	</select>
	
	<select id="c" resultType="com.bjsxt.pojo.Flower">
		select id,name name123,price,production from flower
	</select>
		List<Flower> list = session.selectList("a.b.selAll");
		for (Flower flower : list) {
			System.out.println(flower.toString());
		}
		
		int count = session.selectOne("a.b.selById");
		System.out.println(count);
		
		//把数据库中哪个列的值当作map的key
		Map<Object, Object> map = session.selectMap("a.b.c", "name123");
		System.out.println(map);
发布了23 篇原创文章 · 获赞 7 · 访问量 1794

猜你喜欢

转载自blog.csdn.net/weixin_44145972/article/details/102401061