版权声明: https://blog.csdn.net/qq_35315154/article/details/84973059
一、Mybatis是什么?
是一个持久层的框架,学习成本较低,使用sql语言。
二、Mybatis导入jar包与配置文件
2.1.1导入jar包
需要mybatis的一系列jar包,jdbc jar包,mysql jar包。
额外的,非必要的是log4j.jar
2.2.1配置文件
1.映射配置文件
<?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">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="a" />
</dataSource>
</environment>
</environments>
<!-- 这个地方配置实体类sql映射文件 -->
<mappers>
<mapper resource="MapConfig\UserMapper.xml"/>
</mappers>
</configuration>
2.配置实体类的sql映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注意不要弄错了,配置文件是config,这个是映射mapper -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 加上命名空间,可以起到隔离作用 -->
<mapper namespace="UserMapper">
<!-- id作为sql的一个唯一标示,parameterType是入参类型。框架会自动填充对象中的属性到sql语句中。实体类属性应与数据库中字段名相同。也可以有更高级的做法。这里先说简单的demo -->
<insert id="addUser" parameterType="com.test.domain.User">
insert into User (id,username) values (#{id},#{username})
</insert>
<update id="updateUser" parameterType="com.test.domain.User" >
update user set username = #{username} where id =#{id}
</update>
<delete id="deleteUser" parameterType="Integer">
delete from user where id = #{id}
</delete>
<!-- resultType是返回值类型 -->
<select id="selectUser" parameterType="Integer" resultType="com.test.domain.User">
select id, username from user where id = #{id}
</select>
<select id="selectLikeUser" parameterType="String" resultType="com.test.domain.User">
select id, username from user where username like '%${value}%'
</select>
<select id="selectAllUser" resultType="com.test.domain.User">
select id, username from user
</select>
</mapper>
三、Mybatisdemo完成
1.实体类
package com.test.domain;
public class User {
private int id;
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String Password) {
this.password = Password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + "]";
}
public User(int id, String username) {
super();
this.id = id;
this.username = username;
}
public User() {
super();
}
}
2.测试类
package com.test.dao;
import java.io.IOException;
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 org.junit.Test;
import com.test.domain.User;
public class UserDao {
@Test
public void addUser() throws Exception {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User(2,"zs");
sqlSession.insert("UserMapper.addUser", user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
session.delete("UserMapper.deleteUser", 1);
session.commit();
session.close();
}
@Test
public void updateUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
User user = new User(1,"zs1");
session.update("UserMapper.updateUser", user);
//session.delete("UserMapper.deleteUser", 1);
session.commit();
session.close();
}
@Test
public void selectUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
//session.update("UserMapper.updateUser", user);
//session.delete("UserMapper.deleteUser", 1);
Object user1 = session.selectOne("UserMapper.selectUser", 1);
System.out.println(user1);
session.commit();
session.close();
}
@Test
public void selectAllUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
//session.update("UserMapper.updateUser", user);
//session.delete("UserMapper.deleteUser", 1);
List<User> userList = session.selectList("UserMapper.selectAllUser");
for (User user : userList) {
System.out.println(user);
}
session.commit();
session.close();
}
@Test
public void selectLikeUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
//session.update("UserMapper.updateUser", user);
//session.delete("UserMapper.deleteUser", 1);
List<User> userList = session.selectList("UserMapper.selectLikeUser","z");
for (User user : userList) {
System.out.println(user);
}
session.commit();
session.close();
}
}
四、编写demo中遇到的问题及解决方法
下面都是:序号+解决方法+遇到的问题报错
1.正确配置xml的文件头。配置头中主要的不同部分是config和Mapper
Mapped Statements collection does not contain value for UserMapper.addUser
并且还要在配置文件中包含映射文件。
2.添加数据库中已存在的信息。(表中有主键,如ID为1,再添加ID为1的记录)
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'
3.把ResultType误写成ResultMap。ResultType是直接自动映射类的属性和表的字段,需要同名。ResultMap是一种手动配置类的属性和表字段的映射。
Mapped Statements collection does not contain value for UserMapper.selectLikeUser