myBatis实例

不羁的心 提交于 2020-04-03 23:02:35

一.搭建环境,

建立数据库

1 CREATE TABLE user(
2        id int(11) not NULL AUTO_INCREMENT,
3        userName varchar(50) DEFAULT NULL,
4        userAge int(11) DEFAULT NULL,
5        userAddress varchar(200) DEFAULT NULL,
6        PRIMARY KEY(id)
7 )ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

建立一个myBatis的java项目(不需要web项目)

然后倒入jar包

建总配置文件:

在src下建configration包.在建Configurations.xml文件

代码如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC " -//mybatis.org//DTD Config 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 4 <configuration>
 5     <typeAliases>
 6         <typeAlias type="com.user.User" alias="User"/>
 7     </typeAliases>
 8     <environments default="development">
 9         <environment id="development">
10             <transactionManager type="JDBC" />
11             <dataSource type="POOLED">
12                 <property name="driver" value="com.mysql.jdbc.Driver"/>
13                 <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
14                 <property name="username" value="root"/>
15                 <property name="password" value="123"/>
16             </dataSource>
17         </environment>
18     </environments>
19     
20     <mappers>
21         <mapper resource="configration/User.xml"/>    </mappers>
24 </configuration>

建user的实体类和映射文件:

com.user.User代码:

 1 package com.user;
 2 
 3 public class User {
 4     private int id;
 5     private String userName;
 6     private String userAge;
 7     private String userAddress;
 8     public int getId() {
 9         return id;
10     }
11     public void setId(int id) {
12         this.id = id;
13     }
14     public String getUserName() {
15         return userName;
16     }
17     public void setUserName(String userName) {
18         this.userName = userName;
19     }
20     public String getUserAge() {
21         return userAge;
22     }
23     public void setUserAge(String userAge) {
24         this.userAge = userAge;
25     }
26     public String getUserAddress() {
27         return userAddress;
28     }
29     public void setUserAddress(String userAddress) {
30         this.userAddress = userAddress;
31     }
32     
33 }

configration包下见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="User">
    <select id="selectUserById" parameterType="int" resultType="User">
        select * from user where id=#{id}
    </select>
    <select id="selectUserList" parameterType="int" resultType="User">
        select * from user 
    </select>
 <insert id="insertUser" keyProperty="id" useGeneratedKeys="true"  parameterType="user">
    insert into user
        (userName,userAge)
        values
        (#{userName},#{userName})
    </insert>
</mapper>

 

建测试类

 1 package test;
 2 
 3 import java.io.Reader;
 4 import java.util.List;
 5 
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10 
11 import com.user.User;
12 
13 public class Test {
14     private static SqlSessionFactory sqlSessionFactory;
15     private static Reader reader;
16 
17     static {
18         try {
19             reader = Resources.getResourceAsReader("configration/Configurations.xml");
20             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24     }
25     public static void main(String[] args) {
26         SqlSession session = sqlSessionFactory.openSession();
27         try {
28             //User user = (User) session.selectOne("User.selectUserById", 2);
29             List<User> list=session.selectList("User.selectUserList");
30             for(User user:list){
31                 System.out.println("姓名:"+user.getUserName());
32                 System.out.println("年龄"+user.getUserAge());
33                 System.out.println("地址:"+user.getUserAddress());
34                 System.out.println("-----------------------------------------------------------");
35             }
36             
37         } catch (Exception e) {
38             System.out.println("出现异常了.....");
39             e.printStackTrace();
40         } finally {
41             session.close();
42         }
43     }
44 }

当你查看到从数据库中读取的数据时,说明环境搭建完毕了

如何获取插入数据的主键值呢?

package test;

import java.io.Reader;
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 com.user.User;

public class Run {
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static {
        try {
            reader = Resources.getResourceAsReader("mybatis.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            User u=new User();
            u.setUserAge(255);
            u.setUserName("思思博士");
            int count=session.insert("User.insertUser",u);//count受影响的行数
            session.commit();
            System.out.println("插入数据的id值:>>>>>>>>"+u.getId());
        } catch (Exception e) {
            System.out.println("出现异常了.....");
            e.printStackTrace();
        } finally {
            session.close();
        }
    }
}

上面的count是受影响的行数

u.getId()才是插入数据的主键的id值

 

 

二.用接口的方式实现编程.

建立IUserOperation.java

 1 package inter;
 2 
 3 import java.util.List;
 4 
 5 import com.user.User;
 6 
 7 public interface IUserOperation {
 8     public User selectUserById(int id);
 9     public List<User> selectUserList();
10 }

建立IUser.xml.

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 
 5 <mapper namespace="inter.IUserOperation">
 6     <select id="selectUserById" parameterType="int" resultType="User">
 7         select * from user where id=#{id}
 8     </select>
 9     <select id="selectUserList" resultType="User">
10         select * from user 
11     </select>
12 </mapper>

注意这个地方的namspace就不可以随意取名字了.必须是实现接口的地址.

在总配置文件中mappers添加一条xml:<mapper resource="configration/IUser.xml"/>

添加测试类:

 1 package test;
 2 
 3 import inter.IUserOperation;
 4 
 5 import java.io.Reader;
 6 import java.util.List;
 7 
 8 import org.apache.ibatis.io.Resources;
 9 import org.apache.ibatis.session.SqlSession;
10 import org.apache.ibatis.session.SqlSessionFactory;
11 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
12 
13 import com.user.User;
14 
15 /**
16  * 以接口的方式编程
17  * 如果以这种方式的话,那么对应的sql的xml配置文件中的namespace必须是实现接口的具体地址
18  */
19 public class TestInterface {
20     private static SqlSessionFactory sqlSessionFactory;
21     private static Reader reader;
22 
23     static {
24         try {
25             reader = Resources.getResourceAsReader("configration/Configurations.xml");
26             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
27         } catch (Exception e) {
28             e.printStackTrace();
29         }
30     }
31     public static void main(String[] args) {
32         SqlSession session = sqlSessionFactory.openSession();
33         try {
34             IUserOperation userOperation=session.getMapper(IUserOperation.class);
35             /*User user=userOperation.selectUserById(3);
36             System.out.println(user.getUserAddress());
37             System.out.println(user.getUserName());*/
38             
39             List<User> list=userOperation.selectUserList();
40             for(User user:list){
41                 System.out.println("姓名:"+user.getUserName());
42                 System.out.println("年龄:"+user.getUserAge());
43                 System.out.println("地址:"+user.getUserAddress());
44                 System.out.println("--------------------------------");
45             }
46             
47             
48         } catch (Exception e) {
49             System.out.println("出现异常了.....");
50             e.printStackTrace();
51         } finally {
52             session.close();
53         }
54     }
55 }

 三,使用myBatis完成增删改查.

重新修改以下文件.

IUser.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 
 5 <mapper namespace="inter.IUserOperation">
 6 <!-- 返回list数据集时使用的返回map -->
 7     <resultMap type="User" id="resultListUserMap">
 8         <id column="id" property="id" />
 9         <result column="userName" property="userName"/>
10         <result column="userAge" property="userAge"/>
11         <result column="userAddress" property="userAddress"/>
12     </resultMap>
13     <select id="selectUserById" parameterType="int" resultType="User">
14         select * from user where id=#{id}
15     </select>
16     <select id="selectUsers" parameterType="String" resultMap="resultListUserMap">
17         select * from user where userName like #{userName}
18     </select>
19     <!-- 
20         执行增加操作的SQL语句.id和parameterType分别与IUserOperation接口中的
21         adUser方法的名字和参数类型一致.以#{name}的形式引用User参数的name属性.
22         myBatis将使用反射读取User参数的此属性.#{name}中name大小写敏感.
23         seGeneratedKeys设置为true,表明要myBatis获取自由数据库自动生成的主键;
24         keyProperty="id"指定把获取到的主键值注入到User的id属性    
25      -->    
26     <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
27         insert into user(userName,userAge,userAddress)
28         values(#{userName},#{userAge},#{userAddress});
29     </insert>
30     
31     <update id="updateUser" parameterType="User">
32         update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} 
33         where id=#{id}
34     </update>
35     
36     <delete id="deleteUser" parameterType="int">
37         delete from user where id=#{id}
38     </delete>
39     
40 </mapper>

IUserOperation.java

 1 package inter;
 2 
 3 import java.util.List;
 4 
 5 import com.user.User;
 6 
 7 public interface IUserOperation {
 8     public User selectUserById(int id);    
 9     public List<User> selectUsers(String userName);
10     public void addUser(User user);
11     public void updateUser(User user);
12     public void deleteUser(int id);
13 }

Test1.java

  1 package test;
  2 
  3 import inter.IUserOperation;
  4 
  5 import java.io.Reader;
  6 import java.util.List;
  7 
  8 import org.apache.ibatis.io.Resources;
  9 import org.apache.ibatis.session.SqlSession;
 10 import org.apache.ibatis.session.SqlSessionFactory;
 11 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 12 
 13 import com.user.User;
 14 
 15 public class Test1 {
 16     private static SqlSessionFactory sqlSessionFactory;
 17     private static Reader reader;
 18     static {
 19         try {
 20             reader = Resources
 21                     .getResourceAsReader("configration/Configurations.xml");
 22             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
 23         } catch (Exception e) {
 24             e.printStackTrace();
 25         }
 26     }
 27     public void getUserList(String userName){
 28         SqlSession session=sqlSessionFactory.openSession();
 29         try {
 30             IUserOperation userOperation=session.getMapper(IUserOperation.class);
 31         List<User> users=userOperation.selectUsers(userName);
 32         for(User user:users){
 33             System.out.println("id:"+user.getId());
 34             System.out.println("name:"+user.getUserName());
 35             System.out.println("age:"+user.getUserAge());
 36             System.out.println("address:"+user.getUserAddress());
 37             System.out.println("-----------------");
 38         }
 39         } catch (Exception e) {
 40             System.out.println("查询出错了......");
 41         }finally{
 42             session.close();
 43         }
 44         
 45     }
 46     
 47     /**
 48      * 添加数据,必须提交事务,否则不会写入dao数据库
 49      * @param args
 50      */
 51     public void addUser(){
 52         User user=new User();
 53         user.setUserAddress("安徽,舒城");
 54         user.setUserAge(26);
 55         user.setUserName("思思博士");
 56         SqlSession session=sqlSessionFactory.openSession();
 57         try {
 58             IUserOperation userOperation=session.getMapper(IUserOperation.class);
 59             userOperation.addUser(user);
 60             session.commit();
 61             System.out.println("当前增加的id为:"+user.getId());
 62         } catch (Exception e) {
 63             System.out.println("添加出现异常啦........");
 64         }finally{
 65             session.close();
 66         }        
 67     }
 68     
 69     /**
 70      * 
 71      * @param args
 72      */
 73     public void updateUser(){
 74         User user=new User();
 75         user.setUserAddress("安徽,舒城,千人桥镇");
 76         user.setUserAge(260);
 77         user.setUserName("思思博士");
 78         user.setId(4);
 79         SqlSession session=sqlSessionFactory.openSession();
 80         try {
 81             IUserOperation userOperation=session.getMapper(IUserOperation.class);
 82             userOperation.updateUser(user);
 83             session.commit();
 84             //System.out.println("当前增加的id为:"+user.getId());
 85         } catch (Exception e) {
 86             System.out.println("更新出现异常啦........");
 87         }finally{
 88             session.close();
 89         }        
 90     }
 91     
 92     /**
 93      * 删除数据
 94      * @param args
 95      */
 96     public void deleteUser(int id){
 97         SqlSession session=sqlSessionFactory.openSession();
 98         try {
 99             IUserOperation userOperation=session.getMapper(IUserOperation.class);
100             userOperation.deleteUser(id);
101             session.commit();
102             System.out.println("数据删除成功");
103         } catch (Exception e) {
104             System.out.println("数据删除失败啦.....");
105         }
106         finally{
107             session.close();
108         }
109     }
110     
111     
112     public static void main(String[] args) {
113         Test1 test1=new Test1();
114         //查询列表
115         test1.getUserList("%");        
116         //test1.addUser();//添加数据
117         //test1.updateUser();//更新数据
118         //test1.deleteUser(3);//删除数据
119     }
120 }

 四.联合查询:

IJoinUser.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 
 5 <mapper namespace="inter.IUserJoinOperation">
 6     <resultMap type="User" id="resultListUserMapss">
 7         <id column="id" property="id" />
 8         <result column="userName" property="userName"/>
 9         <result column="userAge" property="userAge"/>
10         <result column="userAddress" property="userAddress"/>
11     </resultMap>
12     <!-- User联合文章进行查询方法之一的配置(多对一的方式) -->
13     <resultMap type="News" id="resultUserNewsListMap">
14         <id property="id" column="Id" />
15         <result property="title" column="title" />
16         <result property="content" column="content" />    
17         <association property="user" javaType="User">
18             <id property="id" column="id" />
19             <result property="userName" column="userName"/>
20             <result property="userAddress" column="userAddress"/>
21         </association> 
22     </resultMap>
23     
24     <select id="getUserNewsList" parameterType="int" resultMap="resultUserNewsListMap">
25         select user.id,user.userName,user.userAge,user.userAddress,
26         news.id,news.userId,news.title,news.content
27         from user,news
28         where user.id=news.userId and user.id=#{id}
29     </select>
30     
31 </mapper>

IUserOperation.java

1 package inter;
2 
3 import java.util.List;
4 
5 import com.user.News;
6 
7 public interface IUserJoinOperation {
8     public List<News> getUserNewsList(int userId);
9 }

测试类:

 1 package test;
 2 
 3 import inter.IUserJoinOperation;
 4 import inter.IUserOperation;
 5 
 6 import java.io.Reader;
 7 import java.util.List;
 8 
 9 import org.apache.ibatis.io.Resources;
10 import org.apache.ibatis.session.SqlSession;
11 import org.apache.ibatis.session.SqlSessionFactory;
12 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
13 
14 import com.user.News;
15 import com.user.User;
16 
17 public class Test2 {
18     private static SqlSessionFactory sqlSessionFactory;
19     private static Reader reader;
20     static {
21         try {
22             reader = Resources
23                     .getResourceAsReader("configration/Configurations.xml");
24             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
25         } catch (Exception e) {
26             e.printStackTrace();
27         }
28     }
29     /**
30      * 联合查询
31      * @param args
32      */
33     public void getUserNews(int userId){
34         SqlSession session=sqlSessionFactory.openSession();
35         try {
36             IUserJoinOperation joinOperation=session.getMapper(IUserJoinOperation.class);
37             List<News> newsList=joinOperation.getUserNewsList(userId);
38             for(News news:newsList){
39                 System.out.println("id:"+news.getId());
40                 System.out.println("title:"+news.getTitle());
41                 System.out.println("content:"+news.getContent());
42                 System.out.println("userId:"+news.getUser().getId());
43                 System.out.println("name:"+news.getUser().getUserName());
44                 System.out.println("age:"+news.getUser().getUserAge());
45                 System.out.println("address:"+news.getUser().getUserAddress());
46                 System.out.println("------------------------------------");
47             }
48             System.out.println("输出完毕....");
49         } catch (Exception e) {
50             System.out.println("联合查询失败啦.......");
51         }
52         finally{
53             session.close();
54         }
55     }
56     
57     public static void main(String[] args) {
58         Test2 test2=new Test2();
59         //查询列表
60         test2.getUserNews(4);
61     }
62 }

其实还可以用另外一种方法:

修改IJoinUser.xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 
 5 <mapper namespace="inter.IUserJoinOperation">
 6     <resultMap type="User" id="resultListUserMapss">
 7         <id column="id" property="id" />
 8         <result column="userName" property="userName"/>
 9         <result column="userAge" property="userAge"/>
10         <result column="userAddress" property="userAddress"/>
11     </resultMap>
12     <!-- User联合文章进行查询方法之一的配置(多对一的方式) -->
13     <resultMap type="News" id="resultUserNewsListMap">
14         <id property="id" column="Id" />
15         <result property="title" column="title" />
16         <result property="content" column="content" />
17         <association property="user" resultMap="resultListUserMapss" javaType="User" />
18         <!-- <association property="user" javaType="User">
19             <id property="id" column="id" />
20             <result property="userName" column="userName"/>
21             <result property="userAddress" column="userAddress"/>
22         </association> -->
23     </resultMap>
24     
25     <select id="getUserNewsList" parameterType="int" resultMap="resultUserNewsListMap">
26         select user.id,user.userName,user.userAge,user.userAddress,
27         news.id,news.userId,news.title,news.content
28         from user,news
29         where user.id=news.userId and user.id=#{id}
30     </select>
31     
32 </mapper>

 

这个地方我测试了一下,不知道为什么总是只能查出一条语句,但是sql语句直接在mysql中查询的话,可以查询多条的,哪位大神知道答案的,请告知啊.

 

 

 

 

本文非原创:

http://blog.csdn.net/techbirds_bao/article/details/9233599/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!