简介:
Mybatis是开源的持久层框架,能够对JDBC访问数据库的过程进行封装,但其并不是完全的ORM(Object Relational Mapping,对象关系映射)。
优点是:
1.简单易学,减少了50%以上的代码量。
2.mybatis框架灵活,SQL语句写在XML文件中,实现了与代码分离,降低了耦合,可重用。
3.可以动态编写SQL语句,包括 if else 等逻辑判断。
劣势:
1.SQL语句编写工作量大,对程序员技术有一定要求,具体跟实际业务场景有关系。
2.SQL语句依赖于具体数据库,不能随意更换数据库,否则就得改代码及配置。
适用场景:
1.需求变化很多的项目,比如,电商,物联网等,对性能要求高的项目。
以上简单介绍了一下mybatis框架的优劣势及场景,下面直接进入主题吧。
>>>>>>>>>>>>>>>>>>>>>>>>>>>案例开始>>>>>>>>>>>>>>>>>>>>>>>>
工具框架:mybatis(3.5.6)+idea(2019)+junit(4.12)+maven(3.8.3)+mysql(5.7)
1.编写数据库建表语句并执行
CREATE TABLE `user4` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) ,
`password` varchar(20) ,
`age` int(11) ,
PRIMARY KEY (`id`)
)
2.打开IDEA编译工具搭建maven工程
3. 取个项目名
4.选中maven所在位置
5.进入项目后,配置src的源码文件
6.在src文件中编辑代码文件结构
6.00 引入jar 包到pom.xml中
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>Mybatis-demo</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>Mybatis-demo Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <!--引入mysql jar包--> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--引入mybatis jar包--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <!--引入junit jar包--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency> </dependencies> <build> <finalName>Mybatis-demo</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
6.0 SqlMapConfig.xml 配置文件代码
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="User.xml"/> </mappers> </configuration>
6.01 实体类代码
<?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属性,不然会报错,可看做包名--> <mapper namespace="user"> <select id="findUserById" parameterType="int" resultType="com.kaka.bean.User"> select * from user4 where id = #{id} </select> <select id="findUserAll" resultType="com.kaka.bean.User"> select * from user4 </select> <insert id="insertUser" parameterType="com.kaka.bean.User"> insert into user4(username,password,age) values(#{username},#{password},#{age}) </insert> <delete id="deleteUserById" parameterType="int"> delete from user4 where id=#{id} </delete> <update id="updateUserPassword" parameterType="com.kaka.bean.User"> update user4 set password=#{password} where id=#{id} </update> </mapper>
6.1 实体类
package com.kaka.bean;
/**
* @Auther: kaka
* @Date: 2022/02/18/9:52
* @Description:
*/
public class User {private Integer id;
private String username;
private String password;public Integer getId() {
return id;
}public void setId(Integer id) {
this.id = id;
}public String getUsername() {
return username;
}public void setUsername(String username) {
this.username = username;
}public String getPassword() {
return password;
}public void setPassword(String password) {
this.password = password;
}public Integer getAge() {
return age;
}public void setAge(Integer age) {
this.age = age;
}private Integer age;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
'}';
}
}
6.2 DAO实现类代码
package com.kaka.dao.impl; import java.io.InputStream; import java.util.List; import com.kaka.bean.User; import com.kaka.dao.UserDao; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; // 实现类 public class UserDaoImpl implements UserDao { public User findUserById(int id) throws Exception { String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); //--------------- User user = session.selectOne("user.findUserById",id); //参数一:namespace.id //-------------- session.close(); return user; } public List<User> findAllUsers() throws Exception { String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); //--------------------- List<User> users = session.selectList("user.findUserAll"); //---------------------- session.close(); return users; } public void insertUser(User user) throws Exception { String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); //--------------------- session.insert("user.insertUser", user); session.commit(); //增删改,一定一定要加上commit操作 //---------------------- session.close(); } public void deleteUserById(int id) throws Exception { String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); //--------------------- session.delete("user.deleteUserById", id); session.commit(); //增删改,一定一定要加上commit操作 //---------------------- session.close(); } public void updateUserPassword(User user) throws Exception { String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = factory.openSession(); //--------------------- session.update("user.updateUserPassword", user); session.commit(); //增删改,一定一定要加上commit操作 //---------------------- session.close(); } }
6.3 DAO 接口代码
package com.kaka.dao; import com.kaka.bean.User; import java.util.List; /** * @Auther: orbbec * @Date: 2022/02/18/9:55 * @Description: */ public interface UserDao { public User findUserById(int id) throws Exception ; public List<User> findAllUsers() throws Exception; public void insertUser(User user) throws Exception; public void deleteUserById(int id) throws Exception; public void updateUserPassword(User user) throws Exception; }
6.4 测试文件代码
package com.kaka.test; import java.util.List; import com.kaka.bean.User; import com.kaka.dao.UserDao; import com.kaka.dao.impl.UserDaoImpl; import org.junit.jupiter.api.Test; public class Test01 { @Test public void testFindUserById() throws Exception{ UserDao userDao = new UserDaoImpl(); User user = userDao.findUserById(7); System.out.println(user); } @Test public void testFindAllUser() throws Exception{ UserDao userDao = new UserDaoImpl(); List<User> findAllUsers = userDao.findAllUsers(); for (User user2 : findAllUsers) { System.out.println(user2); } } @Test public void testInsertUser() throws Exception{ long starttime = System.currentTimeMillis(); UserDao userDao = new UserDaoImpl(); User user = new User(); for (int i = 0; i <20 ; i++) { user.setUsername("张三"+i); user.setPassword("lalal"+i); user.setAge(i); userDao.insertUser(user); } long endtime = System.currentTimeMillis(); System.out.println("执行成功,花了"+(endtime-starttime)+"MS"); } @Test public void testDeleteUserById() throws Exception{ UserDao userDao = new UserDaoImpl(); userDao.deleteUserById(3); } @Test public void testUpdateUserPassword() throws Exception{ UserDao userDao = new UserDaoImpl(); User user = new User(); user.setId(1); user.setPassword("newpassword"); userDao.updateUserPassword(user); } }
6.5 我执行了testInsertUser()这个方法 向表中加了20条数据,运行结果如下,
6.6 查下数据库有没更新
恭喜你又学会了一项新技能,温故而知新,是知也。