【JAVA高级学习】Mybatis【1】

命名规范

  1. 项目名:没有要求
  2. 包名:域名倒写,com.domain.***
  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. 注释:
    10.1 类上和方法上使用文档注释 /** /
    10.2 在方法里面使用/
    */ 或 //
  11. 类:大驼峰
  12. 方法、属性:小驼峰

MVC开发模式

  1. M:Mode 模型。实体类、业务和dao。

  2. V:view 视图。JSP

  3. C:Controller 控制器。servlet
    3.1 作用:视图和逻辑分离

  4. MVC适用场景:大型项目开发。越往底层,复用越高

  5. 示例图:
    在这里插入图片描述

    5.1 设计数据库
    5.2 先写实体类
    5.3 持久层
    5.4 业务逻辑
    5.5 控制器
    5.6 视图

框架是什么?

  1. 框架:软件的半成品,为解决问题制定的一套约束,在提供功能的基础上扩充。
  2. 框架中一些不能被封装的代码(变量),需要使用框架者新建一个xml文件,在文件中添加变量内容。
    2.1 需要建立特定位置和特定名称的配置文件
    2.2 需要使用XML解析技术和反射技术
  3. 常用概念
    3.1 类库:提供的类没有封装一定逻辑。 举例:类库就是名言警句,写作文时引入。
    3.2 框架:区别于类库,里面有一些约束。 举例:框架是填空题。

MyBaits简介

  1. 开源免费框架。原名:iBatis。
  2. 作用:数据访问层框架。
    2.1 底层是JDBC的封装
  3. mybaits优点之一:
    3.1 使用mybatis时不需要编写实现类,只需要写执行的sql命令

环境搭建

  1. 导入jar
    在这里插入图片描述
    asm cglib依赖的包
    cglib 动态代理包
    commons 日志包
    javassist 字节码解析包 cglib依赖的包
    log4j 日志包
    slf4j 日志包
    mybatis 核心包
    mysql 驱动包
  2. 在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>
  1. 新建以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>
  1. 测试结果(只有在单独使用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();
  1. 思考:
<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.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命名目录接口技术(调用程序技术)

数据库连接池

  1. 在内存中开辟一块空间,存放多个数据库连接对象。
  2. JDBC Tomcat Pool ,直接由tomcat产生数据库连接池
  3. 图示
    3.1 active状态:当前连接对象被应用程序使用中
    3.2 Idle状态:空闲状态,等待应用程序使用
    3.3 通过设计两种连接状态,避免不同应用程序同时使用同一个连接对象时,要么拒绝 要么排队的问题,提高效率。
    在这里插入图片描述
  4. 使用数据库连接池的目的:
    4.1 在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升运行效率
    ······4.1.1 小型项目不适用数据库连接池
  5. 实现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>
  1. 可以在JAVA中使用JNDI获取数据库连接池对象
    6.1 Context:上下文接口,其实就是context.xml文件对象类型
    6.2 当关闭连接对象时,把数据库连接对象归还给数据库连接池,把状态改为Idle。
    6.3 代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值