服务器之家

服务器之家 > 正文

Java的MyBatis框架项目搭建与hellow world示例

时间:2020-05-08 11:41     来源/作者:dsbjoe

新建项目(我使用的是maven项目)mybatis-study-01

一、加入mybatis与mysql-connector依赖包到pom文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<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>

二、创建数据库mybatis-test
新建一张user表用于测试。建表sql如下:

?
1
2
3
4
5
6
7
8
9
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

插入一条数据

?
1
INSERT INTO `user` VALUES ('1', '123131', 'summer', '100', 'shanghai,pudong');


三、在项目中编写pojo对象。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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对应的映射文件User.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?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标签可以将公共的sql提取出来复用 -->
 <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会将从数据库查询出来的记录根据列名与pojo中的字段进行匹配, 所以上面的user_name,user_age ,user_address这几个字段都取了别名,跟pojo中的字段相对应。 如果不起别名, 查询出来的对象,这几个字段是没有值的。


五、编写mybatis的配置文件mybatis-config.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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>
 
 <!-- 数据库配置信息 -->
 <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>

在该配置文件中配置了数据库的链接方式,以及注册所有的映射文件,还可以设置mybatis的一些参数。

现在就可以编写测试类了。来测试一下。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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");
 //返回值是记录条数
 int resultCount = session.insert("com.zf.mybatis.pojo.UserMapper.add", user );
 session.commit() ;
 System.out.printf("userID:%d,总记录条数:%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");
 //返回值是修改条数
 int updateCount = session.update("com.zf.mybatis.pojo.UserMapper.update", user );
 session.commit() ;
 System.out.printf("修改条数:%d" ,updateCount);
 } finally {
 session.close();
 }
 }
 
 @Test
 public void testDelete(){
 SqlSession session = sqlSessionFactory.openSession();
 try {
 //返回值是删除条数
 int deleteCount = session.update("com.zf.mybatis.pojo.UserMapper.deleteById", 4 );
 session.commit() ;
 System.out.printf("删除条数:%d" ,deleteCount );
 } finally {
 session.close();
 }
 }
 
 
}

运行testQueryUser结果如下:

?
1
2
shanghai,pudong
summer

到此,一个mybatis的helloworld类型的小程序就出来了。

PS:MyBaits配置文件报错解决
Mybaits的配置文件校验很诡异,节点的位置还有要求
如下,会报错:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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放到最上面就好了说:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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>
标签:

相关文章

热门资讯

沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
返回顶部