MyBaits 系列:快速入门Mybatis完成基本CURD(注解实现)
一.什么是Mybatis?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二.Come on
1.新建Project 选择Maven 直接Next 不用选择模板
2.输入名称、公司或组织Id 选择位置 指定版本 Finish
3.选择Enable Auto-Import (启用自动导入)
4.导入坐标
5.添加表
1 DROP TABLE IF EXISTS `user`; 2 3 CREATE TABLE `mybatis`.`user` ( 4 `userId` int(0) NOT NULL AUTO_INCREMENT, 5 `userName` varchar(20) NOT NULL, 6 `userSex` varchar(2) NULL, 7 PRIMARY KEY (`userId`) 8 );
6.编写domain层
package cn.lb.domain; public class User { private Integer userId; private String userName; private String userSex; public User() { } public User( String userName, String userSex) { this.userName = userName; this.userSex = userSex; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserSex() { return userSex; } public void setUserSex(String userSex) { this.userSex = userSex; } @Override public String toString() { return "User{" + "userId=" + userId + ", userName='" + userName + '\'' + ", userSex='" + userSex + '\'' + '}'; } }
7.编写dao层
1 package cn.lb.dao; 2 3 import cn.lb.domain.User; 4 import org.apache.ibatis.annotations.Delete; 5 import org.apache.ibatis.annotations.Insert; 6 import org.apache.ibatis.annotations.Select; 7 import org.apache.ibatis.annotations.Update; 8 9 import java.util.List; 10 11 public interface IUserDao { 12 /** 13 * 查询所有 14 * @return 15 */ 16 @Select("select * from user") 17 List<User> findAllUser(); 18 19 /** 20 * 根据Id查询 21 * @return 22 */ 23 @Select("select * from user where userId=#{userId}") 24 User findUserById(Integer userId); 25 26 /** 27 * 根据名字查用户 28 * @param userName 29 * @return 30 */ 31 @Select("select * from user where userName like #{username}") 32 List<User> findUserByName(String userName); 33 34 /** 35 * 保存用户 36 * @param user 37 */ 38 @Insert("insert into user(userName,userSex) values(#{userName},#{userSex})") 39 void saveUser(User user); 40 41 /** 42 * 更新用户 43 * @param user 44 */ 45 @Update("update user set userName=#{userName} , userSex=#{userSex} where userId=#{userId}") 46 void updateUser(User user); 47 48 /** 49 * 根据Id删除用户 50 * @param userId 51 */ 52 @Delete("delete from user where userId=#{userId}") 53 void deleteUser(Integer userId); 54 }
8.添加Mybatis配置文件
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 6 <!--配置Properties 7 可以在标签内部配置连接数据库的信息,也可以通过属性引入外部配置文件信息 8 resource属性:用于指定配置文件的位置,是按照类路径的写法来写,并且必须存在于类路径下 9 --> 10 11 <!--引入JdbcConfig配置文件--> 12 <properties resource="jdbcConfig.properties"/> 13 14 <!--配置别名--> 15 <typeAliases> 16 <!--typeAlias用于配置别名 type属性指定的是实体类全限定类名,alias属性指定别名 17 当指定了别名就不区分大小写--> 18 <package name="cn.lb.domain"/> 19 </typeAliases> 20 21 <!-- 配置环境--> 22 <environments default="mysql"> 23 <!--配置MySql环境--> 24 <environment id="mysql"> 25 <transactionManager type="JDBC"></transactionManager> 26 <dataSource type="POOLED"> 27 <property name="driver" value="${jdbc.driver}"/> 28 <property name="url" value="${jdbc.url}"/> 29 <property name="username" value="${jdbc.username}"/> 30 <property name="password" value="${jdbc.password}"/> 31 </dataSource> 32 </environment> 33 </environments> 34 35 <!--指定带注解的包--> 36 <mappers> 37 <!--package标签是用于指定dao接口所在的包 当指定了之后就是不需要写resource或者class或mapper--> 38 <package name="cn.lb.dao"/> 39 </mappers> 40 </configuration>
JdbcConfig配置
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///mybatis?characterEncoding=utf8 jdbc.username=root jdbc.password=1234
9.测试
package cn.lb.test; import cn.lb.dao.IUserDao; import cn.lb.domain.User; 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.After; import org.junit.Before; import org.junit.Test; import javax.annotation.PreDestroy; import java.io.InputStream; import java.util.List; public class MybatisTest { private SqlSessionFactory factory; private SqlSession sqlSession; private InputStream inputStream; private IUserDao userDao; @Before public void init() throws Exception { inputStream = Resources.getResourceAsStream("SqlMapConfig.xml"); factory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = factory.openSession(); userDao = sqlSession.getMapper(IUserDao.class); } @Test public void testSave() { User user = new User("张三", "男"); userDao.saveUser(user); } @Test public void testFindAll() { List<User> list =userDao.findAllUser(); list.forEach(user-> System.out.println(user)); } @Test public void testFindById() { User user =userDao.findUserById(1); System.out.println(user); } @Test public void testFindByName() { List<User> list =userDao.findUserByName("%三%"); } @Test public void testUpdate() { User user =userDao.findUserById(1); user.setUserName("李四"); userDao.updateUser(user); System.out.println(userDao.findUserById(1)); } @Test public void testDelete() { userDao.deleteUser(1); } @After public void destory() throws Exception { sqlSession.commit(); sqlSession.close(); inputStream.close(); } }
注意:如果出现无法编译请指定项目编译版本
微信:17873041739