一、步骤
新建一个无骨架的maven项目:
1.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>cn.itcast</groupId>
<artifactId>Mybatis_day1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
2.创建数据库表和实体类
package com.itheima.domain;
/**
* @author QLBF
* @version 1.0
* @date 2021/1/28 12:18
*/
public class Sys_user {
private int id;
private String username;
private String email;
private String password;
private String phoneNum;
@Override
public String toString() {
return "Sys_user{" +
"id=" + id +
", username='" + username + '\'' +
", email='" + email + '\'' +
", password='" + password + '\'' +
", phoneNum='" + phoneNum + '\'' +
'}';
}
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
}
3.创建UserMapper.xml
(这里是新建一个File再后缀为xml就行,因为它的约束头要下面这样的,不是直接新建Spring config的xml哦):
(一般在resources新建一个xxx.mapper再放进去)
UserMapper.xml:
<?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="userMapper">
<select id="findAll" resultType="com.itheima.domain.Sys_user"> /*Sys_user是数据库对应的实体类*/
SELECT * FROM sys_user /*这里是sys_user是数据库真实的表*/
</select>
</mapper>
4.编写MyBatis核心文件
(直接放在resources下就行,不用放包里,也是同样建File改后缀为xml就行,把下面的开头约束复制进去就行)
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="developement">
<environment id="developement">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com.itheima.mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
5.测试
MybatisTest :
package com.itheima;
import com.itheima.domain.Sys_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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author QLBF
* @version 1.0
* @date 2021/1/28 13:06
*/
public class MybatisTest {
@Test
public void test_queryall() throws IOException {
//获得核心配置文件
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行操作 参数:UserMapper.xml的namespace+id
List<Sys_user> sys_userList= sqlSession.selectList("userMapper.findAll");
//打印数据
System.out.println(sys_userList);
//释放资源
sqlSession.close();
}
}
演示test_queryall():
二、小结
扫描二维码关注公众号,回复:
12514200 查看本文章
三、Mybatis增删改查
重点:Mybatis的事务默认不提交的,跟JDBC不一样的,所以Mybatis在增、删、改时要提交事务sqlSession.commit()(或者openSession(true)也行),查询操作不需要提交,因为它对表没影响
1.如果parameterType后写的是对象,那么#{}括号里写的是实体类的属性,而不是数据表的字段名;
2.如果parameterType后写的是基本类型,那么#{}括号里随便写任意字符串(见下面代码)
查一条数据时并封装成对象用selectone,用到了resultType和parameterType(resultType写对象而已,parameterType没写对象时,#{}还是随便写)
代码在上面的UserMapper.xml和测试代码改下就行,细节在代码的注释里面:
UserMapper.xml:
<?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="userMapper">
<!--查询数据表封装成集合输出-->
<select id="findAll" resultType="com.itheima.domain.Sys_user"> /*Sys_user是数据库对应的实体类*/
SELECT * FROM sys_user /*这里是sys_user是数据库真实的表*/
</select>
<!--查询一个对象数据-->
<select id="findone" resultType="com.itheima.domain.Sys_user" parameterType="int"> /*Sys_user是数据库对应的实体类*/
SELECT * FROM sys_user WHERE id=#{id1}/*这里是sys_user是数据库真实的表*/
</select>
<!--插入操作,save是随便起的,parameterType后面都是写对象类型进行传递的哦-->
<insert id="save" parameterType="com.itheima.domain.Sys_user">
/*这里#后的{}写的是对应上面parameterType对象里面的属性,而不是对应数据库表的哦
(虽然一般数据库表跟实体类设置成一样,但有时不一样,这里要写的是实体类的哦)*/
INSERT INTO sys_user VALUES(#{id},#{username},#{email},#{password},#{phoneNum})
</insert>
<!--修改操作-->
<update id="update" parameterType="com.itheima.domain.Sys_user">
UPDATE sys_user set username=#{username},password=#{password} where id=#{id}
</update>
<!--删除操作——基本类型,parameterType是基本类型的话,#{}里的就随便起-->
<delete id="delete1" parameterType="java.lang.Integer">
delete from sys_user where id=#{abc}
</delete>
<!--删除操作——对象类型,parameterType是对象的话,#{}里的得和对象的属性值一样-->
<delete id="delete_duixiang" parameterType="com.itheima.domain.Sys_user">
DELETE from sys_user where id=#{id}
</delete>
</mapper>
MybatisTest.java:
package com.itheima;
import com.itheima.domain.Sys_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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @author QLBF
* @version 1.0
* @date 2021/1/28 13:06
*/
public class MybatisTest {
@Test
//查询数据库表封装成对象
public void test_queryall() throws IOException {
//获得核心配置文件
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行操作 参数:UserMapper.xml的namespace+id,selectList为mybatis固定有的方法
List<Sys_user> sys_userList= sqlSession.selectList("userMapper.findAll");
//打印数据
System.out.println(sys_userList);
//释放资源
sqlSession.close();
}
@Test
//查询一条数据
public void test_queryone() throws IOException {
//获得核心配置文件
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行操作 参数:UserMapper.xml的namespace+id,selectone为mybatis固定有的方法
Sys_user sys_user = sqlSession.selectOne("userMapper.findone", 3);
//打印数据
System.out.println(sys_user);
//释放资源
sqlSession.close();
}
@Test
//增
public void test_insert() throws IOException {
//先模拟sys_user对象,一般都是web传过来的(这里在这里创而已)
Sys_user sys_user=new Sys_user();
//这里的id是自增的,所以不用设置
sys_user.setUsername("Tom66");
sys_user.setEmail("[email protected]");
sys_user.setPassword("125632");
sys_user.setPhoneNum("13800138000");
//获得核心配置文件
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行操作 参数:UserMapper.xml的namespace+id
sqlSession.insert("userMapper.save",sys_user);
//mybatis执行更新操作(增删改要提交,查询不用) 一定要提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
@Test
//改
public void test_update() throws IOException {
//先模拟sys_user对象,一般都是web传过来的(这里在这里创而已)
Sys_user sys_user=new Sys_user();
//这里要根据对象id删除,所以要设置id了
sys_user.setId(6);
sys_user.setUsername("Tom333");
sys_user.setEmail("[email protected]");
sys_user.setPassword("123");
sys_user.setPhoneNum("13800138000");
//获得核心配置文件
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行操作 参数:UserMapper.xml的namespace+id
sqlSession.update("userMapper.update",sys_user);
//mybatis执行更新操作(增删改要提交,查询不用) 一定要提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
@Test
//根据基本类型删除
public void test_delete_jiben() throws Exception {
//获得核心配置文件
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行操作 参数:UserMapper.xml的namespace+id
sqlSession.delete("userMapper.delete1",5);
//mybatis执行更新操作(增删改要提交,查询不用) 一定要提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
@Test
//根据对象类型删除
public void test_delete_duixiang() throws IOException {
//先模拟sys_user对象,一般都是web传过来的(这里在这里创而已)
Sys_user sys_user=new Sys_user();
//这里要根据对象id删除,所以要设置id了,其他的属性可以不用设置
sys_user.setId(6);
//获得核心配置文件
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行操作 参数:UserMapper.xml的namespace+id
sqlSession.delete("userMapper.delete_duixiang",sys_user);
//mybatis执行更新操作(增删改要提交,查询不用) 一定要提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
}