Mybatis框架快速入门(1)

mybatis框架,是一个持久层框架,是apache下的顶级项目
mybatis让程序员将主要精力放在sql上,通过mytabis提供的映射方式,自动生成满足需要的sql语句
mybatis可以向PreparedStatement中输入参数自动进行输入映射,将查询结果集灵活的映射成Java对象(输出映射),输入映射和输出映射这是mybatis的核心。

要想使用MyBatis框架首先我们要先使用maven导入框架依赖以及相关的jar包(如果不会使用maven请先观看maven如何使用以及构建项目)

 1         <dependency>
 2             <groupId>org.mybatis</groupId>
 3             <artifactId>mybatis</artifactId>
 4             <version>3.4.5</version>
 5         </dependency>
 6         <dependency>
 7             <groupId>mysql</groupId>
 8             <artifactId>mysql-connector-java</artifactId>
 9             <version>5.1.6</version>
10         </dependency>
11         <dependency>
12             <groupId>junit</groupId>
13             <artifactId>junit</artifactId>
14             <version>4.10</version>
15             <scope>test</scope>
16         </dependency>
17         <!-- https://mvnrepository.com/artifact/log4j/log4j -->
18         <dependency>
19             <groupId>log4j</groupId>
20             <artifactId>log4j</artifactId>
21             <version>1.2.17</version>
22         </dependency>

其中需要导入日志  单元测试等等jar包(后面会使用)

我们首先创建mybatis-config.xml文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6 <!--可以通过外部来获取数据库信息-->
 7     <properties resource="db.properties" />
 8 
 9 <!--    settings里面的参数有很多  更多见官方文档
10 https://mybatis.org/mybatis-3/zh/index.html
11 logImpl就是开启日志  每次执行完程序会自动生成日志  这里其中我们采用的是LOG4J
12 -->
13     <settings>
14         <setting name="logImpl" value="LOG4J"/>
15     </settings>
16 
17 <!--   typeAliases相当于别名  可以给自己的类取别名 减少类完全限定名的冗余-->
18     <typeAliases>
19         <typeAlias type="cn.wang.pojo.User" alias="User" />
20     </typeAliases>
21 
22 
23     <environments default="development">
24         <environment id="development">
25             <transactionManager type="JDBC"/>
26             <dataSource type="POOLED">
27                 <property name="driver" value="com.mysql.jdbc.Driver"/>
28                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
29                 <property name="username" value="root"/>
30                 <property name="password" value="123456"/>
31             </dataSource>
32         </environment>
33     </environments>
34 <!-- mappers这里是采用映射方法  需要映射的Mapper的xml文件   -->
35     <mappers>
36         <mapper resource="cn/dao/UserMapper.xml"/>
37     </mappers>
38 </configuration>

这其中还需要写一个MybatisUtitls工具类  进行来获取Mapper  通过工厂来创建

 1 package cn.wang.utils;
 2 
 3 import org.apache.ibatis.io.Resources;
 4 import org.apache.ibatis.session.SqlSession;
 5 import org.apache.ibatis.session.SqlSessionFactory;
 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 7 
 8 import java.io.InputStream;
 9 
10 /**
11  * @author Sx-Wang
12  * @version 1.0
13  * @data 2020-11-11 21:57
14  */
15 public class MybatisUtils {
16     private static SqlSessionFactory sqlSessionFactory;
17     //加载资源
18     static {
19         try {
20             String resource = "mybatis-config.xml";//指定配置的mybatis-config.xml文件名称
21             InputStream inputStream = Resources.getResourceAsStream(resource);
22             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
23         }catch (Exception e){
24             e.printStackTrace();
25         }
26 
27     }
28     //获取可以操作数据库对象的语句
29     public static SqlSession getSqlSession() {
30         return sqlSessionFactory.openSession(true);//参数为是否自动提交事务true为自动提交  不写默认为false
31     
32     }
33 }

编写我们所要操作的pojo类

 

 

 

 1 package cn.wang.pojo;
 2 
 3 /**
 4  * @author Sx-Wang
 5  * @version 1.0
 6  * @data 2020-11-11 22:06
 7  */
 8 public class User {
 9     private int id;
10     private String name;
11     private String password;
12 
13     public User () {
14     }
15 
16     public User (int id, String name, String password) {
17         this.id = id;
18         this.name = name;
19         this.password = password;
20     }
21 
22     @Override
23     public String toString () {
24         return "User{" +
25                 "id=" + id +
26                 ", name='" + name + '\'' +
27                 ", password='" + password + '\'' +
28                 '}';
29     }
30 
31     public int getId () {
32         return id;
33     }
34 
35     public void setId (int id) {
36         this.id = id;
37     }
38 
39     public String getName () {
40         return name;
41     }
42 
43     public void setName (String name) {
44         this.name = name;
45     }
46 
47     public String getPassword () {
48         return password;
49     }
50 
51     public void setPassword (String password) {
52         this.password = password;
53     }
54 }

简单的javabean类基本配置

然后创建增删改查的接口

 1 package cn.dao;
 2 
 3 import cn.wang.pojo.User;
 4 
 5 import java.util.List;
 6 
 7 /**
 8  * @author Sx-Wang
 9  * @version 1.0
10  * @data 2020-11-11 22:08
11  */
12 public interface UserMapper {
13     /**
14      * 查询所有User对象并返回List集合
15      * @return
16      */
17     List<User> getUserAll ();
18 
19     /**
20      * 根据id字段来查询用户
21      * @param id
22      * @return
23      */
24     User getUser(int id);
25 
26     /**
27      * 根据id来删除对应的数据
28      * @param id
29      * @return
30      */
31     void deleteUser(int id);
32 
33     /**
34      * 添加数据
35      * @param user
36      */
37     int addUser(User user);
38 
39     void updateUser(User user);
40 }

我们每写一个接口就需要写与之对应的xxxMapper.xml文件来配置

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper
3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <!--namespace指定UserMapper位置  即为全类名-->
6 <mapper  namespace="cn.dao.UserMapper">
7 </mapper>

与之对应我们就需要配置与之对应的方法

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <!--namespace指定UserMapper位置  即为全类名-->
 6 <mapper  namespace="cn.dao.UserMapper">
 7 
 8     <select id="getUserAll" resultType="list">
 9             select *from mybatis.user
10      </select>
11 
12     <select id="getUser" resultType="User" parameterType="int">
13         select *from mybatis.user where id=#{id}
14     </select>
15 
16     
17     <delete id="deleteUser" parameterType="int">
18         delete from mybatis.user where id=#{id}
19     </delete>
20 
21 
22     <insert id="addUser" parameterType="User" >
23         insert into mybatis.user(id,name,password) values (#{id},#{name},#{password})
24     </insert>
25 
26 
27     <update id="updateUser" parameterType="User">
28         update mybatis.user set name = #{name},password=#{password} where id = #{id}
29     </update>
30 </mapper>

增删改查对应的标签就是insert  delete update  select 和数据库中相同

标签页中间就是写sql语句进行来查询  我们只需要调用其中的方法即可(无需写实现类)收到的数据Mybatis框架会自动封装

 1 package cn.dao;
 2 
 3 import cn.wang.pojo.User;
 4 import cn.wang.utils.MybatisUtils;
 5 import org.apache.ibatis.session.SqlSession;
 6 import org.apache.log4j.Logger;
 7 import org.junit.Test;
 8 
 9 import java.util.List;
10 
11 /**
12  * @author Sx-Wang
13  * @version 1.0
14  * @data 2020-11-11 22:15
15  */
16 public class UserMapperTest {
17     Logger logger = Logger.getLogger(UserMapperTest.class);
18 
19     /**
20      * 测试获取所有的User对象并返回一个集合
21      */
22     @Test
23     public void test () {
24         SqlSession sqlSession = MybatisUtils.getSqlSession();
25         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
26         List<User> userAll = mapper.getUserAll();
27         for (User user : userAll) {
28             System.out.println(user);
29         }
30 
31 //        logger.info("info:getUserAll成功了");
32 
33         sqlSession.close();
34 
35     }
36 
37     /**
38      * 获取单个User数据并返回对象
39      */
40     @Test
41     public void test1 () {
42         SqlSession sqlSession = MybatisUtils.getSqlSession();
43         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
44         User user = mapper.getUser(3);
45         System.out.println(user.getId() + "-" + user.getName() + "-" + user.getPassword());
46         logger.info("info:getUser成功了");
47 
48         sqlSession.close();
49     }
50 
51     /**
52      * 根据id名来删除某一条记录
53      */
54 
55     @Test
56     public void test2 () {
57         SqlSession sqlSession = MybatisUtils.getSqlSession();
58         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
59         mapper.deleteUser(1);
60         sqlSession.close();
61     }
62 
63     /**
64      * 添加User对象进入数据库
65      */
66     @Test
67     public void test3 () {
68         SqlSession sqlSession = MybatisUtils.getSqlSession();
69         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
70         mapper.addUser(new User(1, "校长", "12455"));
71         sqlSession.commit();
72         sqlSession.close();
73     }
74 
75 
76     @Test
77     public void test4 () {
78         SqlSession sqlSession = MybatisUtils.getSqlSession();
79         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
80         mapper.updateUser(new User(3, "李四", "123456"));
81 
82         sqlSession.close();
83 
84     }
85 }

 

posted @ 2020-11-29 21:24  想变强的小王  阅读(67)  评论(0)    收藏  举报