Mybatis1.0——框架入門,從0到簡單增刪改查資料
JavaWeb框架學習文章
首先是準備Mybatis的jar包
Mybatis下載地址
1,匯入Mybatis-x.x.x.jar和lib中的依賴包
2,匯入要使用的資料庫的驅動包
3,建立一個config檔案,在config資料夾下建立一個log4j.properties
開啟mybatis自帶的pdf,翻到logging配置中找需要的配置資訊,大概如下
這裡貼出mybatis-3.4.6中的資訊
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
由於我們在開發階段,所以上述內容中的ERROR也就是日誌級別,建議改成DEBUG,投入工作後可以用INFO,ERROR
4,在config下建立一個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>
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務管理 -->
<transactionManager type="JDBC"/>
<!-- 配置資料庫連線池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 載入對映檔案 -->
<mappers>
<mapper resource="sqlmap/user.xml"/>
</mappers>
</configuration>
5,在config中建立一個sqlmap包,然後包內建立一個user.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">
<!-- namespace名稱空間:對sql進行分類化管理,隔離sql -->
<mapper namespace="test">
<!-- 用來查詢
id:用來標識這條select
parameterType:傳入的引數型別
resultType:返回的sql對映成的java物件型別
#{}表示一個佔位符
#{}中如果要輸入的引數名是簡單型別,那麼引數名可以任意:如#{id},#{value}
${}表示將接收到的引數不加任何修飾拼接到sql中
${value},如果接受的型別是簡單型別,引數只能填value
${}的方式 可能引起sql注入,不推薦使用
-->
<select id="findUserById" parameterType="int" resultType="com.hhh.dao.User">
select * from user where id = #{id}
</select>
<select id="findUserByName" parameterType="java.lang.String" resultType="com.hhh.dao.User">
select * from user where name like '%${value}%'
</select>
</mapper>
6,在src包下建立常見的User物件,該物件對應資料庫中的表,user.xml中的返回型別也就是它
7,建立測試類(主要測試的是單項結果查詢,和多項結果查詢)
package com.hhh.test;
import java.io.InputStream;
import java.util.List;
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 com.hhh.dao.User;
public class MyTest {
@Test
public void test1() throws Exception {
//讀取mybatis配置檔案
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");//由於建立的是原始碼包,所以可以直接讀
//建立會話工廠,傳入配置資訊
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//通過工廠得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
/*
* 通過SqlSession運算元據庫
* 引數1:名稱空間和sql的id
* 引數2: 傳向佔位符的值
* */
User user = sqlSession.selectOne("test.findUserById",1);
System.out.println(user);
List<User> selectList = sqlSession.selectList("test.findUserByName","張三");
System.out.println(selectList);
sqlSession.close();
}
}
執行結果:
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 422392391.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@192d3247]
DEBUG [main] - ==> Preparing: select * from user where id = ?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <== Total: 1
User [id=1, name=張三1, age=20, tel=12341]
DEBUG [main] - ==> Preparing: select * from user where name like '%張三%'
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 2
[User [id=1, name=張三1, age=20, tel=12341], User [id=2, name=張三2, age=21, tel=12342]]
插入資料:
修改user.xml
<!--
向user表中插入資訊
由於id自增所以不需要填
-->
<insert id="insertInfoToUser" parameterType="com.hhh.dao.User">
insert into user(name, age, tel) values(#{name},#{age},#{tel})
</insert>
測試類:
User user = new User("王五3",18,"12346");
sqlSession.insert("test.insertInfoToUser", user);
sqlSession.commit();//如果不提交將會回滾事務
執行結果:
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1181869371.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4671e53b]
DEBUG [main] - ==> Preparing: insert into user(name, age, tel) values(?,?,?)
DEBUG [main] - ==> Parameters: 王五3(String), 18(Integer), 12346(String)
DEBUG [main] - <== Updates: 1
DEBUG [main] - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@4671e53b]
獲取自增長的id值:
修改user.xml
<insert id="insertInfoToUser" parameterType="com.hhh.dao.User">
insert into user(name, age, tel) values(#{name},#{age},#{tel})
<!-- keyProperty:引數名
order:插入後獲取
resultType:返回值型別
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select last_insert_id();
</selectKey>
</insert>
修改測試類:
User user = new User("王五3",18,"12346");
sqlSession.insert("test.insertInfoToUser", user);
sqlSession.commit();//如果不提交將會回滾事務
System.out.println(user.getId());
結果:
DEBUG [main] - ==> Preparing: insert into user(name, age, tel) values(?,?,?)
DEBUG [main] - ==> Parameters: 王五3(String), 18(Integer), 12346(String)
DEBUG [main] - <== Updates: 1
DEBUG [main] - ==> Preparing: select last_insert_id();
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 1
DEBUG [main] - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@6950e31]
9
刪除使用者:
修改user.xml
<delete id="deleteById" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>
測試類:
sqlSession.delete("deleteById", 6);
sqlSession.commit();
修改使用者:
修改user.xml
<update id="updateUser" parameterType="com.hhh.dao.User">
update user set name = #{name} where id = #{id}
</update>
需要注意的是這裡的引數不是簡單型別,所以不能夠隨便填,欄位名和屬性名需要對應。由於根據id修改資料,所以這裡傳入的屬性必須要有id值。
User user = new User("王五3",18,"12346");
user.setId(5);
sqlSession.update("updateUser", user);
sqlSession.commit();
相關文章
- CoreData - 簡單 增刪改查
- layui+ssm簡單增刪改查UISSM
- MongoDB——簡單增、刪、改、查實踐MongoDB
- 簡單的用c3p0和dbutils實現的資料庫增刪查改資料庫
- 資料庫的簡介和MySQL增刪改查資料庫MySql
- mysql資料增刪改查操作MySql
- Java實現簡單的增刪改查操作Java
- Mybatis-plus實現簡單增刪改查MyBatis
- PLSQL學習-【2簡單的增刪改查】SQL
- 資料庫操作增刪改查模糊查資料庫
- 基本的資料庫增刪改查資料庫
- MySql 表資料的增、刪、改、查MySql
- 使用Django開發簡單介面:文章增刪改查Django
- MongoDB下載安裝與簡單增刪改查MongoDB
- 增刪改查
- Flutter資料庫Sqflite之增刪改查Flutter資料庫
- mogoose 建立資料庫並增刪改查Go資料庫
- FMDB | 實現資料的增刪改查
- go——beego的資料庫增刪改查Go資料庫
- mysql 資料增刪改查基本語句MySql
- 利用Express+MySQL進行簡單的增刪改查ExpressMySql
- 最簡單的sql語句(增刪改查統計)SQL
- 使用Mongoose類庫實現簡單的增刪改查Go
- 使用Go語言建立簡單的CRUD增刪改查Go
- 寫一個簡單的Linkedlist,實現增刪改查
- YII1 增、刪、改、查資料庫操作資料庫
- ORM實操之資料的增刪改查ORM
- 關於mongodb資料庫的增刪改查MongoDB資料庫
- Numpy array資料的增、刪、改、查例項
- 搭建頁面:資料庫的增刪改查資料庫
- iOS FMDB資料庫之增刪改查使用iOS資料庫
- Python操作SQLServer資料庫增刪改查PythonSQLServer資料庫
- indexedDB 增刪改查Index
- SQL增刪改查SQL
- mysql增刪改查MySql
- Mongoose查增改刪Go
- FMDB增刪改查
- mysql增查刪改MySql