生活随笔
收集整理的這篇文章主要介紹了
【Mybatis框架】从零开始学Mybatis框架——使用示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、數據庫SQL 命令
1、創建數據庫,并指定編碼
Create database ssm
default character set utf8
2.創建表
Create table 表名
(列名類型約束
auto_increment comment ‘備注’
,
);
3、添加數據
INSERT INTO `ssm
`.`flower
` (`id
`, `name
`, `price
`, `production
`) VALUES ('2', '梔子花', '5.1', '山東');
二、Eclipse 使用
創建項目
選擇target runtime,否則出現新建jsp 報錯,如果忘記選擇,右鍵項目–> build path中添加libraryEclipse 默認會自己下載所需tomcat 最簡單結構。
三、框架是什么
框架:軟件的半成品.未解決問題制定的一套約束,在提供功能基礎上進行擴充。框架中一些不能被封裝的代碼(變量),需要使用框架者新建一個 xml 文件,在文件中添加變量內容。
比如:需要建立特定位置和特定名稱的配置文件;需要使用xml 解析技術和反射技術。常用概念
類庫:提供的類沒有封裝一定邏輯。(類庫就是名言警句,寫作文時引入名言警句)
框架:區別與類庫,里面有一些約束。(框架是填空題)
四、MyBatis 簡介
Mybatis 開源免費框架。原名叫iBatis,2010 在google code,2013 年遷移到github。作用: 數據訪問層框架。
底層是對JDBC 的封裝。mybatis 優點之一:
使用mybatis 時不需要編寫實現類,只需要寫需要執行的 sql 命令。
五、環境搭建
目錄結構:
導入jar
在src 下新建全局配置文件(編寫JDBC 四個變量)
2.1 沒有名稱和地址要求例如,路徑/mybatis0(項目名)/src/myabtis.xml即可
2.2 在全局配置文件中引入DTD 或schema
2.2.1 如果導入dtd 后沒有提示:
點擊Window--> preference --> XML --> XMl catalog --> add 按鈕(課件資料中,包含所有需要用到的dtd文件)
2.3 全局配置文件內容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="default"><environment id="default"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/bjsxt/mapper/FlowerMapper.xml"/></mappers>
</configuration>
新建以mapper 結尾的包,在包下新建:實體類名+Mapper.xml。例如FlowerMapper.xml
3.1 文件作用:編寫需要執行的SQL 命令
3.2 把xml 文件理解成實現類.
3.3 xml 文件內容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="a.b" ><select id="selAll" resultType="com.bjsxt.pojo.Flower">select id,name name123,price,production from flower
</select><select id="selById" resultType="int">select count(*) from flower
</select><select id="c" resultType="com.bjsxt.pojo.Flower">select id,name name123,price,production from flower
</select></mapper>
測試結果(只有在單獨使用 mybatis 時使用,最后 ssm 整合時,下面代碼不需要編寫)
package com
.bjsxt
.test
;import java
.io
.IOException
;
import java
.io
.InputStream
;
import java
.util
.List
;
import java
.util
.Map
;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 com
.bjsxt
.pojo
.Flower
;public class Test {public static void main(String
[] args
) throws IOException
{InputStream is
= Resources
.getResourceAsStream("myabtis.xml");SqlSessionFactory factory
= new SqlSessionFactoryBuilder().build(is
);SqlSession sqlSession
= factory
.openSession();List
<Flower> list
= sqlSession
.selectList("a.b.selAll");for (Flower flower
: list
) {System
.out
.println(flower
.toString());}int count
= sqlSession
.selectOne("a.b.selById");System
.out
.println(count
);Map
<Object, Object> map
= sqlSession
.selectMap("a.b.c", "name123");System
.out
.println(map
);sqlSession
.close();}
}
輸出
Flower [id=1, name=向日葵, price=2.05, production=江西]
Flower [id=2, name=梔子花, price=5.1, production=山東]
2
{梔子花=Flower [id=2, name=梔子花, price=5.1, production=山東], 向日葵=Flower [id=1, name=向日葵, price=2.05, production=江西]}
六、環境搭建詳解
1.全局配置文件中內容
(1) <transactionManager/> type 屬性的可取值包括:
JDBC,事務管理使用JDBC 原生事務管理方式
MANAGED 把事務管理轉交給其他容器.原生JDBC 事務setAutoMapping(false)
(2) <dataSouce/>type屬性
POOLED 使用數據庫連接池
UNPOOLED 不實用數據庫連接池,和直接使用JDBC 一樣
JNDI :java 命名目錄接口技術.
七、數據庫連接池
在內存中開辟一塊空間,存放多個數據庫連接對象.JDBC Tomcat Pool,直接由tomcat 產生數據庫連接池.圖示
active 狀態:當前連接對象被應用程序使用中
Idle 空閑狀態:等待應用程序使用
使用數據庫連接池的目的
在高頻率訪問數據庫時,使用數據庫連接池可以降低服務器系統壓力,提升程序運行效率.
小型項目不適用數據庫連接池。實現JDBC tomcat Pool 的步驟.
在web 項目的META-INF 中存放context.xml,在context.xml 編寫數據庫連接池相關屬性。把項目發布到tomcat 中,數據庫連接池產生了。
<?xml version="1.0" encoding="UTF-8"?>
<Context><ResourcedriverClassName="com.mysql.cj.jdbc.Driver"url="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"username="root"password="123456"maxActive="50"maxIdle="20"name="test"auth="Container"maxWait="10000"type="javax.sql.DataSource"/>
</Context>
可以在java 中使用jndi 獲取數據庫連接池中對象
Context:上下文接口.context.xml 文件對象類型
當關閉連接對象時,把連接對象歸還給數據庫連接池,把狀態改變成Idle
代碼示例:
package com
.bjsxt
.servlet
;import java
.io
.IOException
;
import java
.io
.PrintWriter
;
import java
.sql
.Connection
;
import java
.sql
.PreparedStatement
;
import java
.sql
.ResultSet
;
import java
.sql
.SQLException
;import javax
.naming
.Context
;
import javax
.naming
.InitialContext
;
import javax
.naming
.NamingException
;
import javax
.servlet
.ServletException
;
import javax
.servlet
.annotation
.WebServlet
;
import javax
.servlet
.http
.HttpServlet
;
import javax
.servlet
.http
.HttpServletRequest
;
import javax
.servlet
.http
.HttpServletResponse
;
import javax
.sql
.DataSource
;@WebServlet("/pool")
public class DemoServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req
, HttpServletResponse res
) throws ServletException
, IOException
{try {Context cxt
= new InitialContext();DataSource ds
= (DataSource
) cxt
.lookup("java:comp/env/test");Connection conn
= ds
.getConnection();PreparedStatement ps
= conn
.prepareStatement("select * from flower");ResultSet rs
= ps
.executeQuery();res
.setContentType("text/html;charset=utf-8");PrintWriter out
= res
.getWriter();while(rs
.next()){out
.print(rs
.getInt(1)+" "+rs
.getString(2)+"<br/>");}out
.flush();out
.close();rs
.close();} catch (NamingException e
) {e
.printStackTrace();} catch (SQLException e
) {e
.printStackTrace();}}
}
八、三種查詢方式
1.selectList() 返回值為List<resultType 屬性控制>
適用于查詢結果都需要遍歷的需求
List
<Flower> list
= sqlSession
.selectList("a.b.selAll");for (Flower flower
: list
) {System
.out
.println(flower
.toString());}
2.selectOne() 返回值Object
適用于返回結果只是變量或一行數據時
int count
= sqlSession
.selectOne("a.b.selById");System
.out
.println(count
);
3.selectMap() 返回值Map
適用于需要在查詢結果中通過某列的值取到這行數據的需求.
Map<key,resultType 控制>
Map
<Object, Object> map
= sqlSession
.selectMap("a.b.c", "name123");System
.out
.println(map
);
4.三種查詢方式的完整代碼示例
package com
.bjsxt
.test
;import java
.io
.IOException
;
import java
.io
.InputStream
;
import java
.util
.List
;
import java
.util
.Map
;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 com
.bjsxt
.pojo
.Flower
;public class Test {public static void main(String
[] args
) throws IOException
{InputStream is
= Resources
.getResourceAsStream("myabtis.xml");SqlSessionFactory factory
= new SqlSessionFactoryBuilder().build(is
);SqlSession sqlSession
= factory
.openSession();List
<Flower> list
= sqlSession
.selectList("a.b.selAll");for (Flower flower
: list
) {System
.out
.println(flower
.toString());}int count
= sqlSession
.selectOne("a.b.selById");System
.out
.println(count
);Map
<Object, Object> map
= sqlSession
.selectMap("a.b.c", "name123");System
.out
.println(map
);sqlSession
.close();}
}
總結
以上是生活随笔為你收集整理的【Mybatis框架】从零开始学Mybatis框架——使用示例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。