1:三层架构
表现层:
是用于展示数据的
业务层
是处理业务需求的
持久层
是和数据库交互的
2:持久层技术解决方案
JDBC技术
Connection
PreparedStatement
ResultSt
Spring的JdbcTemplate
spring对jdbc的简单封装
Apache的DBUtils:
它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装
以上这些都不是框架
JDBC是规范
Spring的JdbcTemplate和Apache的DBUtils:都只是工具类
jdbc程序的回顾
public static void main(String[] args){
Connection connection =null;
PreparedStatement preparedStatement = null;
try{
//加载数据库成功
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接
connection =DriverManager.getConection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root","root");
//定义sql语句 ?表示占位符
String sql ="select * from user where username=?"
//获取预处理statement
preparedStatement =connection.preparedStatement(sql);
//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二参数为设置的参数值
preparedStatement.setString(1,"王五");
//向数据库发起sql执行查询,查询出结果集
resultSet =preparedStatement.executeQuery();
//遍历查询结果集
while(resultSet.next()){
System.out.println(resultSet.getString("id")+"
"+resultSet.getString("username"));
}
}catch(Exception e){
e.printStackTrace();
}finally{
//释放资源
if(resultSet!=null){
try{
resultSet.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
3:MyBatis框架概述
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动,创建连接,创建statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种statement配置起来。并通过java对象和statement中sql的动态参数进行映射生成最终执行的Sql语句,最后由mybatis框架执行Sql并将结果映射为java对象并返回。
采用ORM思想解决了实体和数据库映射的问题,对jdbc进行封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库持久层操作。
ORM:
Object Relationa Mapping 对象关系映射
简单的说:
就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。
实体类中的属性和数据库表的字段名称保持一致:
user User
id id
user_name user_name
4:mybatis的入门
mybatis的环境搭建
第一步:创建maven工程并导入坐标
第二部:创建实体类和dao的接口
第三步:创建Mybatis的主配置文件。SqlMapConfig.xml
第四步:创建映射配置文件
IUserDao.xml
环境搭建的注意事项:
第一个:创建IUserDao.xml和IUserDao.java时名称是为了和我们之前的知识一致。在Mybatis中它把持久层的操作层接口名称和映射文件也叫做:Mapper
所以:IUserDao和IUserMapper是一样的。
第二个:在idea中创建目录的时候,它和包不一样的
包在创建时:com.itheima.dao它是三级目录
目录在创建时:com.itheima.dao是一级目录。
第三个:mybatis的映射配置文件位置必须和dao接口的包结构相同
第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名。
第五个:映射配置文件的操作配置(例如:select,id属性的取值必须是dao接口的方法名。
当我们遵从了第三四五之后,我们在开发时无线再写dao的实现类。
5:mybatis配置
mybatis依赖mybatis
打包方式,选择架包jar
配置mybatis依赖坐标
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
配置mysql依赖坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
如果想打印日志配置日志依赖坐标
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
如果要弄单元测试,需要配junit依赖坐标
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
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">
<mapper namespace="com.itcast.dao.IUserDao">
<select id="findAll" resultType="com.itcast.domain.User">
select * from user;
</select>
<!--保存用户-->
<insert id="saveUser" parameterType="com.itcast.domain.User">
insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday});
</insert>
<!--更新用户-->
<update id="updateUser" parameterType="com.itcast.domain.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex}, address=#{address} where id=#{id}
</update>
<!--删除用户-->
<delete id="deleteUser" parameterType="Integer">
delete from user where id=#{userid};
</delete>
</mapper>
dao接口
package com.itcast.dao;
import com.itcast.domain.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author : huyi
* @date : 2020/4/8
* 用户的持久层接口
*/
public interface IUserDao {
/*
* 查询所有操作
* */
List<User> findAll();
/*
* 保存方法
* */
void saveUser(User user);
/*
* 更新用户
* */
void updateUser(User user);
/*
* 根据用户ID,删除用户
* */
void deleteUser(Integer userId);
}