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 }