标签:name public 初学 user 使用 Mybatis id pw
什么是Mybatis?
它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低。Mybatis也是SSM中唯一一个官方有中文文档的框架。
文档地址:https://mybatis.org/mybatis-3/zh/index.html
学Mybatis的作用
可以简化对数据库操作的动作、简化了JDBC操作、可以灵活的操作数据库、操作事务。
Mybatis使用
搭建Mybatis环境
Mybatis是操作数据库的框架、要使用Mybatis得先有个库才能玩起来!所以我们得先弄个存储数据的数据表!
//创建数据库
create database mybatis
use mybatis
//创建用户表
create table user(
id int,
name varchar(20),
paw varchar(20)
)
//插入数据
insert into user values(1,'刘德华','666666'),(2,'张学友','888888'),(3,'彭于晏','686868');
创建maven项目
接下来是Java这边的环境搭建、创建maven项目、导入相关jar包、jar包最好用稳定的版本、一味追求高版本是在替后人找bug。
<!--mybatis包-jar -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--数据库连接驱动jar -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--单元测试jar -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
编写配置Mybatis核心配置文件
<?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/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 映射配置文件,SqlMapper.xml配置文件下主要是配置对数据库的操作 -->
<mappers>
<mapper resource="com/ling/dao/SqlMapper.xml"/>
</mappers>
</configuration>
创建工具类将配置文件加载进Mybatis的SqlSessionFactoryBuilder类中构建出SqlSessionFactory,从SqlSessionFactory中获取SqlSession,SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "mybatis_config.xml";
try {
InputStream input = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
} catch (IOException e) {
e.printStackTrace();
}
}
//开启会议、返回一个会议得以操作数据库
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
创建一个用户实体类对象
public class User {
private Integer id;
private String name;
private String pw;
public User() {
}
public User(Integer id, String name, String pw) {
this.id = id;
this.name = name;
this.pw = pw;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pw='" + pw + '\'' +
'}';
}
}
创建dao层操作接口,先来个CRUD(增删改查)操作
public interface UserDao {
//查询所有用户
public List<User> selectUser();
//添加用户
public int addUser(User user);
//删除用户
public int deleteUser(int id);
//修改用户
public int updateUser(User user);
}
接下来就是编写刚刚的Mybatis核心配置文件中的映射文件,数据库操作配置文件,主要的操作还是在这个配置文件里,上面的接口只是媒介方便我们调用。
<?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="com.ling.dao.UserDao">
<!-- 查询所有用户信息,返回类型resultType-->
<select id="selectUser" resultType="com.ling.pojo.User">
select * from user
</select>
<!--添加一个用户-->
<insert id="addUser" parameterType="com.ling.pojo.User" >
insert into user values(#{id},#{name},#{pw})
</insert>
<!--修改一个用户信息-->
<update id="deleteUser" parameterType="int" >
delete from user where id = #{id}
</update>
<!--删除一个用户-->
<delete id="updateUser" parameterType="com.ling.pojo.User" >
update user set name = #{name},pw = #{pw} where id = #{id}
</delete>
</mapper>
- namespace 十分重要,不能写错!
- namespace的值绑定的是dao层数据库操作接口、从而可以在调用接口方法时相当于调用配置文件中相对应的操作。(初学Mybatis理解,往后学了Mybatis就不是这么想了可能)
- 映射中不同的标签对应着不同的操作。
- parameterType的值对应着参数类型
- resultType的值对应着返回类型
- 操作标签的id值必须得跟接口的方法相对应,不然调用不上
- #{}是拿参数的值、如果参数是对象的话可以直接拿到对象中的属性值、如果是基本类型就通过参数名直接拿到参数。
最后测试操作
//获取session
SqlSession session = MybatisUtils.getSession();
//由session得到相对的映射
UserDao mapper = session.getMapper(UserDao.class);
/*
测试查询所有用户
* */
@Test
public void selectuser(){
//操作映射中对应的执行方法
List<User> users = mapper.selectUser();
for (User s:users) {
System.out.println(s.toString());
}
}
/*
测试添加用户
* */
@Test
public void adduser(){
//操作映射中对应的执行方法
User user = new User(4, "黄凯芹", "123456");
int i = mapper.addUser(user);
System.out.println(i == 1? "添加成功!":"添加失败!");
//提交事务
session.commit();
//关闭内存
session.close();
}
/*
测试查询所有用户
* */
@Test
public void updateUser(){
//操作映射中对应的执行方法
User user = new User(3, "刘德华", "68686");
int i = mapper.updateUser(user);
System.out.println(i == 1 ? "修改成功!":"修改失败!");
session.commit();
session.close();
}
/*
测试查询所有用户
* */
@Test
public void deleteUser(){
//操作映射中对应的执行方法
int i = mapper.deleteUser(4);
System.out.println(i == 1? "删除成功!":"删除失败!");
session.commit();
session.close();
}
Caused by: java.io.IOException: Could not find resource com/ling/dao/SqlMapper.xml
注意点:增、删、改操作需要提交事务!不提交事务的话操作将无法在数据库生效、程序返回的提示并不能说明已经成功修改数据库、要数据库发生改变才是。
可能出现Maven静态资源过滤问题、出错代码类似
Caused by: java.io.IOException: Could not find resource com/ling/dao/SqlMapper.xml
出现这个问题就在项目的pox文件中加入以下代码
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
如有错漏地方望指点!
标签:name,public,初学,user,使用,Mybatis,id,pw 来源: https://blog.csdn.net/weixin_45643536/article/details/118978893
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。