框架学习日记1
为什么要使用框架
- 不用考虑布局、排版等,提高效率
- 可专心在简历内容上
- 结构统一,便于人事阅读
- 新手也可以作出专业的简历
什么是框架技术
1、是一个应用程序的半成品
2、提供可重用的公共结构
3、按一定规则组织的一组组件
框架技术优势
1、不用再考虑公共问题
2、专心在业务实现上
3、结构统一,易于学习、维护
4、新手也可写出好程序
主流框架介绍
Spring
1、依赖注入容器 / AOP实现
2、声明式事务
3、简化Java EE应用
4、黏合剂,将大家组装到一起
Spring MVC
1、结构最清晰的MVC Model2实现
2、高度可配置,支持多种视图技术
3、定制化开发
MyBatis
1、半自动化的ORM实现
2、DAO层
3、动态SQL
4、小巧灵活、简单易学
MyBatis
官方网站:http://mybatis.org
文档:https://mybatis.org/mybatis-3/zh/index.html
MyBatis特点
MyBatis简介
1、基于SQL语法,简单易学
2、能了解底层封装过程
3、SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
4、方便程序代码调试
MyBatis框架优缺点
优点
1、与JDBC相比,减少了50%以上的代码量
2、最简单的持久化框架,小巧并简单易学
3、SQL代码从程序代码中彻底分离,可重用
4、提供XML标签,支持编写动态SQL
5、提供映射标签,支持对象与数据库的ORM字段映射
缺点
1、SQL语句编写工作量大,对开发人员有一定要求
2、数据库移植性差
MyBatis基本要素
1、MyBatis的核心对象
a. SqlSessionFactoryBuilder
b. SqlSessionFactory
c. SqlSession
2、mybatis-config.xml 系统核心配置文件
3、mapper.xml SQL映射文件
核心对象
SqlSessionFactoryBuilder
1、用过即丢,其生命周期只存在于方法体内
2、可重用其来创建多个 SqlSessionFactory 实例
3、负责构建SqlSessionFactory,并提供多个build方法的重载
SqlSessionFactory
1、SqlSessionFactory是每个MyBatis应用的核心
2、作用:创建SqlSession实例
3、作用域:Application
4、生命周期与应用的生命周期相同
5、单例
➢ 存在于整个应用运行时,并且同时只存在一个对象实例
SqlSession
1、包含了执行SQL所需的所有方法
2、对应一次数据库会话,会话结束必须关闭
3、线程级别,不能共享
搭建MyBatis开发环境
思路
1、下载mybatis-3.2.2.jar包并导入工程
2、编写MyBatis核心配置文件(configuration.xml)
3、创建实体类-POJO
4、DAO层-SQL映射文件(mapper.xml)
5、创建测试类
5.1、读取核心配置文件mybatis-config.xml
5.2、创建SqlSessionFactory对象,读取配置文件
5.3、创建SqlSession对象
5.4、调用mapper文件进行数据操作
mybatis-config.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>
<!-- configuration配置的顺序 -->
<!--properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers? -->
<properties resource="database.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ishopn/model/CommoditytypeMapper.xml"/>
<mapper resource="com/ishopn/model/CommodityMapper.xml"/>
<mapper resource="com/ishopn/model/CustomerMapper.xml"/>
<mapper resource="com/ishopn/model/OrderMapper.xml"/>
</mappers>
</configuration>
CommoditytypeMapper.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.ishopn.model.CommoditytypeMapper">
<select id="getCommoditytypeList" resultType="com.ishopn.model.Commoditytype">
select * from commoditytype
</select>
<select id="getCommoditytypeById" resultType="com.ishopn.model.Commoditytype">
select * from commoditytype where ct_id=#{ct_id}
</select>
<update id="updCommoditytypeById">
update commoditytype set ct_name=#{ct_name} where ct_id=#{ct_id}
</update>
<insert id="insCommoditytype">
insert into commoditytype(ct_id,ct_name) values(#{ct_id},#{ct_name})
</insert>
<delete id="delCommoditytypeById">
delete from commoditytype where ct_id=#{ct_id}
</delete>
</mapper>
Demo测试类
public class CommoditytypeDemo {
@Test
public void getCommoditytypeList() {
try {
//若不用工具类的代码实现
// String resource = "mybatis-config.xml";
// InputStream inputStream = Resources.getResourceAsStream(resource);
// //1 获取创建SqlSessionFactory
// SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// SqlSession session = sqlSessionFactory.openSession();
SqlSession session = SessionHelper.getSqlSession();
List<Commoditytype> ctList = session.selectList("com.ishopn.model.CommoditytypeMapper.getCommoditytypeList");
System.out.println(ctList);
SessionHelper.closeSqlSession(session);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void getCommoditytypeById() {
SqlSession session = SessionHelper.getSqlSession();
Object selectOne = session.selectOne("com.ishopn.model.CommoditytypeMapper.getCommoditytypeById","2");
System.out.println(selectOne);
SessionHelper.closeSqlSession(session);
}
@Test
public void updCommoditytypeById() {
SqlSession session = SessionHelper.getSqlSession();
int line = session.update("com.ishopn.model.CommoditytypeMapper.updCommoditytypeById",new Commoditytype("7","电子"));
System.out.println(line);
//事务
session.commit(); //提交事务
// session.rollback(); //或者回滚
SessionHelper.closeSqlSession(session);
}
@Test
public void insCommoditytype() {
SqlSession session = SessionHelper.getSqlSession();
int line = session.insert("com.ishopn.model.CommoditytypeMapper.insCommoditytype",new Commoditytype("8","乐器"));
System.out.println(line);
session.commit();
SessionHelper.closeSqlSession(session);
}
@Test
public void delCommoditytypeById() {
SqlSession session = SessionHelper.getSqlSession();
int line = session.delete("com.ishopn.model.CommoditytypeMapper.delCommoditytypeById", "8");
System.out.println(line);
session.commit();
SessionHelper.closeSqlSession(session);
}
}
工具类
public class SessionHelper {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
public static void closeSqlSession(SqlSession session) {
if(session!=null) {
session.close();
}
}
}