Java的MyBatis框架項目搭建與hellow world示例
新建項目(我使用的是maven項目)mybatis-study-01
一、加入mybatis與mysql-connector依賴包到pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mybatis</groupId> <artifactId>mybatis-study-01</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>mybatis-01</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.27</version> </dependency> </dependencies> </project>
二、創(chuàng)建數(shù)據(jù)庫mybatis-test
新建一張user表用于測試。建表sql如下:
CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `password` varchar(255) default NULL, `user_name` varchar(50) default NULL, `user_age` int(11) default NULL, `user_address` varchar(200) default NULL, PRIMARY KEY (`id`), UNIQUE KEY `userName` (`user_name`) ) EN
插入一條數(shù)據(jù)
INSERT INTO `user` VALUES ('1', '123131', 'summer', '100', 'shanghai,pudong');
三、在項目中編寫pojo對象。
package com.zf.mybatis.pojo;
public class User {
private int id;
private String password ;
private String userName;
private String userAge;
private String userAddress;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
四、編寫pojo對應(yīng)的映射文件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">
<mapper namespace="com.zf.mybatis.pojo.UserMapper">
<!-- 使用sql標(biāo)簽可以將公共的sql提取出來復(fù)用 -->
<sql id="queryFields">
id , password , user_name as userName , user_age as userAge , user_address as userAddress
</sql>
<select id="selectByID" parameterType="int" resultType="User">
select
<include refid="queryFields"/>
from `user` where id = #{id}
</select>
<insert id="add" parameterType="User" useGeneratedKeys="true" keyProperty="id" >
insert into `user`
(password , user_name , user_age , user_address)
values(#{password} , #{userName} , #{userAge} , #{userAddress} )
</insert>
<update id="update" parameterType="User" >
update `user`
set password = #{password} , user_name = #{userName}, user_age = #{userAge}, user_address = #{userAddress}
where id = #{id}
</update>
<delete id="deleteById" parameterType="int">
delete from `user` where id = #{id}
</delete>
</mapper>
注意:上面的namespace的值為com.zf.mybatis.pojo.UserMapper,可以自定義 ,UserMapper不是一個類,不需要存在的。
另外,mybatis會將從數(shù)據(jù)庫查詢出來的記錄根據(jù)列名與pojo中的字段進(jìn)行匹配, 所以上面的user_name,user_age ,user_address這幾個字段都取了別名,跟pojo中的字段相對應(yīng)。 如果不起別名, 查詢出來的對象,這幾個字段是沒有值的。
五、編寫mybatis的配置文件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> <!-- 配置別名 --> <typeAliases> <typeAlias alias="User" type="com.zf.mybatis.pojo.User"/> </typeAliases> <!-- 數(shù)據(jù)庫配置信息 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-test"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 映射文件 --> <mappers> <mapper resource="conf/User.xml"/> </mappers> </configuration>
在該配置文件中配置了數(shù)據(jù)庫的鏈接方式,以及注冊所有的映射文件,還可以設(shè)置mybatis的一些參數(shù)。
現(xiàn)在就可以編寫測試類了。來測試一下。
package com.zf.mybatis;
import java.io.IOException;
import java.io.Reader;
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 com.zf.mybatis.pojo.User;
public class TestMyBatis {
private SqlSessionFactory sqlSessionFactory;
private Reader reader;
@Before
public void init(){
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testQueryUser(){
SqlSession session = sqlSessionFactory.openSession();
try {
User user = (User) session.selectOne("com.zf.mybatis.pojo.UserMapper.selectByID" ,1);
System.out.println(user.getUserAddress());
System.out.println(user.getUserName());
} finally {
session.close();
}
}
@Test
public void testInsertUser(){
SqlSession session = sqlSessionFactory.openSession();
try {
User user = new User() ;
user.setUserName("abcde");
user.setUserAge(15) ;
user.setUserAddress("hangzhou/zhejiang");
user.setPassword("123456");
//返回值是記錄條數(shù)
int resultCount = session.insert("com.zf.mybatis.pojo.UserMapper.add", user );
session.commit() ;
System.out.printf("userID:%d,總記錄條數(shù):%d" , user.getId() , resultCount); //獲取插入對象的id
} finally {
session.close();
}
}
@Test
public void testUpdateUser(){
SqlSession session = sqlSessionFactory.openSession();
try {
User user = new User() ;
user.setId(5) ;
user.setUserName("updateName");
user.setUserAge(101) ;
user.setUserAddress("shenzhen/guangdong");
user.setPassword("000000");
//返回值是修改條數(shù)
int updateCount = session.update("com.zf.mybatis.pojo.UserMapper.update", user );
session.commit() ;
System.out.printf("修改條數(shù):%d" ,updateCount);
} finally {
session.close();
}
}
@Test
public void testDelete(){
SqlSession session = sqlSessionFactory.openSession();
try {
//返回值是刪除條數(shù)
int deleteCount = session.update("com.zf.mybatis.pojo.UserMapper.deleteById", 4 );
session.commit() ;
System.out.printf("刪除條數(shù):%d" ,deleteCount );
} finally {
session.close();
}
}
}
運(yùn)行testQueryUser結(jié)果如下:
shanghai,pudong summer
到此,一個mybatis的helloworld類型的小程序就出來了。
PS:MyBaits配置文件報錯解決
Mybaits的配置文件校驗很詭異,節(jié)點(diǎn)的位置還有要求
如下,會報錯:
The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,mappers?)".
<?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">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@xx:1521:xx"/>
<property name="username" value="ireport"/>
<property name="password" value="xxxx"/>
</dataSource>
</environment>
</environments>
<typeAliases>
<typeAlias type="com.ice.stat.online.model.EventFlag" alias="EventFlag"/>
</typeAliases>
<mappers>
<mapper resource="com/ice/stat/online/model/hbm/EventFlagMapper.xml"/>
</mappers>
</configuration>
把typeAliases放到最上面就好了說:
<?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>
<typeAliases>
<typeAlias type="com.ice.stat.online.model.EventFlag" alias="EventFlag"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@xx:1521:xx"/>
<property name="username" value="ireport"/>
<property name="password" value="xxxx"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ice/stat/online/model/hbm/EventFlagMapper.xml"/>
</mappers>
</configuration>
- 詳解idea搭建springboot+mybatis框架的教程
- 使用IDEA搭建SSM框架的詳細(xì)教程(spring + springMVC +MyBatis)
- Spring+Mybatis+Mysql搭建分布式數(shù)據(jù)庫訪問框架的方法
- 詳解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超級詳細(xì)版)
- Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)
- 詳解MyEclipse中搭建spring-boot+mybatis+freemarker框架
- Spring MVC 4.1.3 + MyBatis零基礎(chǔ)搭建Web開發(fā)框架(注解模式)
- Windows下Java+MyBatis框架+MySQL的開發(fā)環(huán)境搭建教程
- MyBatis框架搭建與代碼解讀分析
相關(guān)文章
spring security結(jié)合jwt實現(xiàn)用戶重復(fù)登錄處理
本文主要介紹了spring security結(jié)合jwt實現(xiàn)用戶重復(fù)登錄處理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Java語言實現(xiàn)Blowfish加密算法完整代碼分享
這篇文章主要介紹了Java語言實現(xiàn)Blowfish加密算法完整代碼分享,簡單介紹了blowfish加密算法,具有一定借鑒價值,需要的朋友可以參考下。2017-11-11
為什么ConcurrentHashMap的key value不能為null,map可以?
這篇文章主要介紹了為什么ConcurrentHashMap的key value不能為null,map可以呢?具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Spring Security 自定義短信登錄認(rèn)證的實現(xiàn)
這篇文章主要介紹了Spring Security 自定義短信登錄認(rèn)證的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Spring-Cloud Eureka注冊中心實現(xiàn)高可用搭建
這篇文章主要介紹了Spring-Cloud Eureka注冊中心實現(xiàn)高可用搭建,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
Java中的Set接口實現(xiàn)類HashSet和LinkedHashSet詳解
這篇文章主要介紹了Java中的Set接口實現(xiàn)類HashSet和LinkedHashSet詳解,Set接口和java.util.List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進(jìn)行功能上的擴(kuò)充,只是比Collection接口更加嚴(yán)格了,需要的朋友可以參考下2024-01-01
Java ArrayList與LinkedList及HashMap容器的用法區(qū)別
這篇文章主要介紹了Java ArrayList與LinkedList及HashMap容器的用法區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-07-07
JavaFX 監(jiān)聽窗口關(guān)閉事件實例詳解
這篇文章主要介紹了JavaFX 監(jiān)聽窗口關(guān)閉事件實例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
使用@SpringBootTest注解進(jìn)行單元測試
這篇文章主要介紹了使用@SpringBootTest注解進(jìn)行單元測試,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

