一.搭建环境,
建立数据库
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/
来源:https://www.cnblogs.com/guoyansi19900907/p/4462449.html