什么是框架?
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
框架要解决的问题
框架要解决的最重要的一个问题是技术整合的问题,在J2EE的 框架中,有着各种各样的技术,不同的软件企业需要从J2EE中选择不同的技术,这就使得软件企业最终的应用依赖于这些技术,技术自身的复杂性和技术的风险 性将会直接对应用造成冲击。而应用是软件企业的核心,是竞争力的关键所在,因此应该将应用自身的设计和具体的实现技术解耦。
这样,软件企业的研发将集中在 应用的设计上,而不是具体的技术实现,技术实现是应用的底层支撑,它不应该直接对应用产生影响。
软件开发分层的重要性?
为了实现“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源
mubatis入门的案例(增删改查、模糊查询)
创建测试的数据库
#判断存在即删除数据库
drop database if exists mydb;
#创建数据库
create database mydb;
#使用数据库
use mydb;
#创建表
create table emp
(
eid int primary key auto_increment,
ename varchar(20),
dept varchar(20),
job varchar(11),
sa1 int,
phone varchar(20),
address varchar(10)
);
insert into emp(ename,dept,job,sa1,phone,address) values('张翠萍','测试部','测试工程师',5800, ' 15821563548','郑州');
insert into emp(ename,dept,job,sa1,phone,address) values('李耀菲','测试部','测试经理',9800, '13658942168','许昌');
insert into emp(ename,dept,job,sa1,phone,address) values('王长林','研发部','开发工程师',8800, '13954865721','南阳');
insert into emp(ename,dept,job,sa1,phone,address) values('陈清泰','研发部','开发经理',14900, '13785463249','洛阳');
insert into emp(ename,dept,job,sa1,phone,address) values('赵德保','运维部','运维工程师',5200, '15785642139','信阳');
insert into emp(ename,dept,job,sa1,phone,address) values('刘瑞琳','运维部','产品经理',12600, '17956248563','商丘');
select * from emp;
2.创建一个Java项目并导入mybatis框架的jar包
在项目中创建一个lib文件夹放入mybatis框架的jar包,并导入项目中。
创建实体类
private int eid;
private String ename;
private String dept;
private String job;
private int sa1;
private String phone;
private String address;
编写get和set方法、
tostring方法
//get和set方法
public int getEid() {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getSa1() {
return sa1;
}
public void setSa1(int sa1) {
this.sa1 = sa1;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
//toString
@Override
public String toString() {
return "Emp{" +
"eid=" + eid +
", ename='" + ename + '\'' +
", dept='" + dept + '\'' +
", job='" + job + '\'' +
", sa1=" + sa1 +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
'}';
}
4.创建针对表操作的接口类。
在src中创建com.wang.dao包,然后创建EmpDao的接口,然后在接口中定义针对数据库的增删 改查等操作
package com.wang.dao;
import com.wang.bean.Emp;
import java.util.List;
public interface EmpDao {
//全查
List<Emp> selectAll();
//根据员工id查询员工信息
Emp selectById(int eid);
//添加·员工信息
int addEmp(Emp emp);
//修改员工信息
int reviseEmp(Emp emp);
//删除员工信息
int delEmp(int eid);
//模糊查询
List<Emp>selectlike(String ename);
}
5.在接口的包中创建对应的mapper映射配置文件。
在dao接口的同目录下创建跟接口名字一样的配置文件。
<?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.wang.dao.EmpDao">
<!--通过select标签进行查询
id:映射接口的方法名
parameterType:指定参数的类型(如果是集合类型只需要指定集合元素的类型即可)
resultType:指定返回值的类型
-->
<select id="selectAll" resultType="com.wang.bean.Emp">
select * from emp;
</select>
<!--数据回显-->
<select id="selectById" parameterType="int" resultType="com.wang.bean.Emp">
select * from emp where eid=#{eid};
</select>
<insert id="addEmp" parameterType="com.wang.bean.Emp">
insert into emp(ename,dept,job,sa1,phone,address) values(#{ename},#{dept},#{job},#{sa1},#{phone},#{address});
</insert>
<delete id="delEmp" parameterType="int">
delete from emp where eid=#{eid};
</delete>
<update id="reviseEmp" parameterType="com.wang.bean.Emp">
update emp set ename=#{ename},dept=#{dept},job=#{job},sa1=#{sa1},phone=#{phone},address=#{address}where eid=#{eid};
</update>
<select id="selectlike" parameterType="String" resultType="com.wang.bean.Emp">
select * from emp where ename like "%"#{ename}"%";
</select>
</mapper>
6.在src目录中创建mybatis框架的核心配置文件。
在src中创建一个文件,命名为SqlMapConfig.xml,在该配置文件中配置连接数据库的参数。
<?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:指定配置的环境信息的id,表示默认连接该环境
-->
<environments default="mysql">
<environment id="mysql">
<!--配置事务的处理方式:模式使用JDBC的事务处理-->
<transactionManager type="jdbc"></transactionManager>
<!--数据源的默认type设置为pooled,表示使用连接池-->
<dataSource type="pooled">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--加载mapper配置文件-->
<mappers>
<mapper class="com.wang.dao.EmpDao" />
</mappers>
</configuration>
7.在测试类中进行测试
使用mybatis框架需要按照框架的步骤进行
package com.wang.test;
import com.wang.bean.Emp;
import com.wang.dao.EmpDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class mytest {
InputStream stream=null;
SqlSessionFactoryBuilder builder=null;
SqlSessionFactory factory=null;
SqlSession sqlSession=null;
EmpDao empDao=null;
//初始化
@Before
public void init() throws IOException {
//1.加载核心配置文件的字节输入流
stream = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
builder = new SqlSessionFactoryBuilder();
//3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
factory = builder.build(stream);
//4.通过工厂对象获取SqlSession对象----执行JDBC操作的
sqlSession = factory.openSession();
//5.通过SqlSession对象获取接口对应的代理对象
empDao = sqlSession.getMapper(EmpDao.class);
}
//全查
@Test
public void selectAll(){
List<Emp> empList = empDao.selectAll();
for (Emp emp:empList) {
System.out.println(emp);
}
}
//新增
@Test
public void add(){
Emp emp=new Emp();
emp.setEname("小曾");
emp.setDept("销售部");
emp.setJob("销售经理");
emp.setSa1(9850);
emp.setPhone("1789632148");
emp.setAddress("三门峡");
int i = empDao.addEmp(emp);
if (i>0){
System.out.println("add....success");
}
}
//删除
@Test
public void del(){
int i = empDao.delEmp(8);
if (i>0){
System.out.println("del....success");
}
}
//修改
@Test
public void update(){
//修改前的数据(数据回显)
Emp emp = empDao.selectById(2);
System.out.println("修改前的数据"+emp);
//修改数据
emp.setEname("小齐");
emp.setPhone("11111");
int i = empDao.reviseEmp(emp);
if (i>0){
//修改后的数据
Emp emp1 = empDao.selectById(2);
System.out.println("修改后的数据"+emp1);
}
}
//模糊查询
@Test
public void selectlike(){
List<Emp> empList = empDao.selectlike("刘");
System.out.println(empList);
// for (Emp emp1:empList) {
// System.out.println(emp1);
// }
}
}