框架(Framework)——半成品軟件
框架(Framework)是整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì)嘀掸,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例之間交互的方法;另一種定義認(rèn)為儒将,框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架卿闹。前者是從應(yīng)用方面而后者是從目的方面給出的定義。
簡(jiǎn)而言之竞端,框架其實(shí)就是某種應(yīng)用的半成品屎即,就是一組組件,供你選用完成你自己的系統(tǒng)事富。簡(jiǎn)單說就是使用別人搭好的舞臺(tái)技俐,你來做表演。而且统台,框架一般是成熟的雕擂,不斷升級(jí)的軟件框架一般處在低層應(yīng)用平臺(tái)(如 J2EE )和高層業(yè)務(wù)邏輯之間的中間層。
作者:method
鏈接:http://www.reibang.com/p/4339ad509be1
來源:簡(jiǎn)書
著作權(quán)歸作者所有贱勃。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)井赌,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
Mybatis
mybatis是一個(gè)優(yōu)秀的基于java的持久層框架贵扰,它內(nèi)部封裝了jdbc仇穗,使開發(fā)者只需要關(guān)注sql語句本身,而不需要花費(fèi)精力去處理加載驅(qū)動(dòng)戚绕、創(chuàng)建連接纹坐、創(chuàng)建statement等繁雜的過程。mybatis通過 xml 或注解的方式將要執(zhí)行的各種statement配置起來舞丛,并通過java對(duì)象和statement 中
sql 的動(dòng)態(tài)參數(shù)進(jìn)行映射生成最終執(zhí)行的 sql 語句耘子,最后由 mybatis 框架執(zhí)行 sql 并將結(jié)果映射為 java 對(duì)象并返回。采用 ORM 思想解決了實(shí)體和數(shù)據(jù)庫映射的問題球切,對(duì) jdbc進(jìn)行了封裝谷誓,屏蔽了 jdbc api 底層訪問細(xì)節(jié)梯捕,使我們不用與 jdbc api 打交道倒得,就可以完成對(duì)數(shù)據(jù)庫的持久化操作趁冈。
作者:method
鏈接:http://www.reibang.com/p/4339ad509be1
來源:簡(jiǎn)書
著作權(quán)歸作者所有触机。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)畜普,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處砸脊。
JDBC問題
1.數(shù)據(jù)庫連接創(chuàng)建涡匀、釋放頻繁造成系統(tǒng)資源的浪費(fèi)從而影響性能拴事;
2.Sql語句在代碼中硬編碼 造成代碼不易維護(hù)蒋伦,實(shí)際應(yīng)用 sql 變化的可能較大弓摘,sql 變動(dòng)需要改變 java代碼。
3痕届、使用 preparedStatement 向占有位符號(hào)傳參數(shù)存在硬編碼韧献,因?yàn)?sql 語句的 where 條件不一定,可能多也可能少研叫,修改 sql 還要修改代碼锤窑,系統(tǒng)不易維護(hù)。
4嚷炉、對(duì)結(jié)果集解析存在硬編碼(查詢列名)渊啰,sql 變化導(dǎo)致解析代碼變化,系統(tǒng)不易維護(hù)申屹,如果能將數(shù)據(jù)庫記錄封裝成 pojo 對(duì)象解析比較方便
作者:method
鏈接:http://www.reibang.com/p/4339ad509be1
來源:簡(jiǎn)書
著作權(quán)歸作者所有绘证。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處哗讥。
Mybatis 框架快速入門
1.創(chuàng)建maven工程
maven 用于管理jar包嚷那,其存在于倉庫中
2.添加依賴jar包
在pome.xml中添加所需的依賴坐標(biāo)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<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.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 定義classpath -->
<resources>
<!-- resources文件 -->
<resource>
<directory>src/main/resources</directory>
<!-- 是否被過濾,如果被過濾則無法使用 -->
<filtering>false</filtering>
</resource>
<!-- java文件夾 -->
<resource>
<directory>src/main/java</directory>
<!-- 引入映射文件等 -->
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
3.編寫User實(shí)體類
-3.1 數(shù)據(jù)庫腳本
導(dǎo)入數(shù)據(jù)庫即可
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用戶名稱',
`birthday` datetime DEFAULT NULL COMMENT '生日',
`sex` char(1) DEFAULT NULL COMMENT '性別',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('41', '老李', '2018-02-27 17:47:08', '男', '北京');
INSERT INTO `user` VALUES ('42', '小二李', '2018-03-02 15:09:37', '女', '北京');
INSERT INTO `user` VALUES ('43', '小二李', '2018-03-04 11:34:34', '女', '北京');
INSERT INTO `user` VALUES ('45', '居八戒', '2018-03-04 12:04:06', '男', '北京');
INSERT INTO `user` VALUES ('46', '老李李', '2018-03-07 17:37:26', '男', '北京');
INSERT INTO `user` VALUES ('48', '小馬寶莉', '2018-03-08 11:44:00', '女', '北京');
-3.2 編寫實(shí)體類
-3.3 編寫持久層接口IUserDao
import com.neusoft.domain.User;
import java.util.List;
public interface IUserDao {
// 查詢所有
List<User> findAll();
}
-3.4 編寫持久層接口的映射(target)文件IUserDao.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.IUserDao">
<!-- 配置查詢所有用戶的sql-->
<select id="findAll" resultType="com.User">
select * from user
</select>
</mapper>
4.編寫SqlMapConfig.xml文件(連接數(shù)據(jù)庫)
<?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">
<!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置環(huán)境 -->
<environments default="mysql">
<!-- 配置mysql的環(huán)境-->
<environment id="mysql">
<!-- 配置事務(wù)的類型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置數(shù)據(jù)源(連接池) -->
<dataSource type="POOLED">
<!-- 配置連接數(shù)據(jù)庫的4個(gè)基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/java_ssm"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每個(gè)dao獨(dú)立的配置文件 -->
<mappers>
<mapper resource="com/neusoft/dao/IUserDao.xml"/>
</mappers>
</configuration>
5.測(cè)試類文件test
package com.neusoft.test;
import com.neusoft.dao.IUserDao;
import com.neusoft.domain.User;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisTest1 {
@Test
public void test1() throws IOException {
// 1. 讀取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2. 創(chuàng)建 SqlSessionFactory工廠
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 3. 使用 工廠生產(chǎn)的 SqlSession對(duì)象
SqlSession session = factory.openSession();
// 4. 使用SqlSession 創(chuàng)建Dao 接口 的代理對(duì)象
IUserDao userDao = session.getMapper(IUserDao.class);
// 5. 使用代理對(duì)象執(zhí)行方法
List<User> users = userDao.findAll();
for(User user: users){
System.out.println(user);
}
// 6 釋放資源
session.close();
in.close();
}
}
運(yùn)行結(jié)果
基于注解的mybatis
1.在持久層接口中添加注解
package com.neusoft.dao;
import com.neusoft.domain.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface IUserDao {
// 查詢所有
@Select("select * from user")
List<User> findAll();
}
2.修改SqlMapConfig.xml配置文件
<!-- 告知mybatis映射配置的位置-->
<mappers>
<mapper class="com.neusoft.dao.IUserDao"></mapper>
</mappers>