Mybatis简介
1.Mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
2.Mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。
3.最后Mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了java、api底层访问细节,使我们不用与jdbc、api打交道,就可以完成对数据库的持久化操作。
官方网址: https://mybatis.org/mybatis-3/
Mybatis开发步骤
(1)添加Mybatis坐标
(2)创建user数据表
(3)编写User实体类
(4)编写映射文件stuMapper.xml
(5)编写核心文件SqlMapper.xml
(6)编写测试类
新建项目
查询
(1)添加Mybatis坐标
在pom.xml中添加
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
(2)创建user数据表
(3)编写User实体类
1.在java下建包com.nky.myapplication
2.在java中的包建stu.java实体类
添加get和set方法
package com.nky.myapplication;
public class stu {
private int uid;
private String name;
private String pwd;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
(4)编写映射文件stuMapper.xml
1.在resources下建包com.nky.myapplication
2.在包中创建stuMapper.xml
3.在stuMapper.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">
4.创建节点mapper,属性namespace命名空间(给映射表的名字id1)
不需要参数类型,需要返回类型resultType(返回的是实体)
select元素:
属性id(id2)(调用的时候写id1下的id2就是这条select语句)
resultType返回类型resultType="com.nky.myapplication.stu"
(5)编写核心文件SqlMapper.xml
1.在resources下建SqlMapper.xml
2.在SqlMapper.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">
3.configuration标签
<?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配置环境数据库使用哪个连接-->
<environments default="default1">
<!--配置具体连接到哪一个数据库-->
<environment id="default1">
<!--transactionManager,配置事物控制类型为JDBC-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据库连接池
POOLED,mybatis内置的数据库连接池(推荐使用)
UNPOOLED,不使用连接池
JNDI,使用服务器tomcat容器的数据库连接池
-->
<dataSource type="POOLED">
<!--mysql驱动类-->
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<!--数据库连接字符串-->
<property name="url" value="jdbc:mysql://localhost:3306/student"></property>
<!--username数据库用户名-->
<property name="username" value="root"></property>
<!--password数据库密码-->
<property name="password" value=""></property>
</dataSource>
</environment>
</environments>
<!--引入映射文件stuMapper.xml-->
<mappers>
<mapper resource="com.nky.myapplication/stuMapper.xml"></mapper>
</mappers>
</configuration>
(6)编写测试类
在java下的包com.nky.myapplication下创建javamain测试类
1.写主方法
2.读sqlMapper.xml获取输入流:Resources.getResourceAsStream(“sqlMapper.xml”);
注意:
1)Resources选org.apache.ibatis.io
2)写完记得抛异常
3. new SqlSessionFactoryBuilder() 用 .build方法(resourceAsStream);
4. 打开连接 build .openSession();
5. sqlSession .selectList()对应stuMapper.xml的SELECT * FROM stu
//返回类型是stu
List<stu> ls = sqlSession.selectList("stuMapper.findall");
6.for循环显示出来
for (int i = 0; i<ls.size(); i++){
System.out.println(ls.get(i).getUid() + "," + ls.get(i).getName() +"," + ls.get(i).getPwd());
}
运行结果:
总结查询:
1.添加Mybatis坐标
2.建表
3.编写User实体类
4.编写映射文件stuMapper.xml
5.编写核心文件SqlMapper.xml
6.编写测试类
查询单个表总共数据数量
(1)在映射文件stuMapper.xml
不需要参数类型,需要返回类型resultType(id是integer类型)
<select id="cxsl" resultType="integer">
SELECT count(*) FROM stu
</select>
(2)编写测试类
查询数据库条目 int a= sqlSession .selectOne(“stuMapper.cxsl”);有参数就填参数parameterType,没参数就这么写
System.out.println(a);
数据库数据:
运行结果:
增加/插入
(上面有的步骤就不再重复啦~)
(1)在映射文件stuMapper.xml
需要parameterType参数类型(插入的是实体),不需要返回值
#{name},#{pwd}:#{}括号里是要填实体stu.java对应属性的名字
<insert id="charu" parameterType="com.nky.myapplication.stu">
INSERT INTO stu (name,pwd) values (#{name},#{pwd})
</insert>
(2)编写测试类
在java下的包com.nky.myapplication下创建javamain测试类
1.写主方法
2.读sqlMapper.xml:Resources.getResourceAsStream(“sqlMapper.xml”);
3. new SqlSessionFactoryBuilder() 用 .build方法(resourceAsStream);
4. 打开连接 build .openSession();
5.sqlSession .insert(“stuMapper.xml的id:stuMapper.charu”,实体:s);对应stuMapper.xml的** INSERT INTO stu (name,pwd) values (#{name},#{pwd})**
6.创建上一步实体s
stu s = new stu();
s.setName(“aaa”);
s.setPwd(“654321”);
7.事务一定要commit(没有不执行)
sqlSession .commit();
8.关闭
sqlSession .close();
结果:
查询表中插入成功:
删除
(上面有的步骤就不再重复啦~)
(1)在映射文件stuMapper.xml
需要parameterType参数类型(删除的是实体),不需要返回值
#{uid}:#{}括号里是要填实体stu.java对应属性的名字uid
<delete id="shanchu" parameterType="com.nky.myapplication.stu">
DELETE FROM stu where uid=#{uid}
</delete>
(2)编写测试类
在java下的包com.nky.myapplication下创建javamain测试类
1.写主方法
2.读sqlMapper.xml:Resources.getResourceAsStream(“sqlMapper.xml”);
3. new SqlSessionFactoryBuilder() 用 .build方法(resourceAsStream);
4. 打开连接 build .openSession();
5.sqlSession .delete(“stuMapper.xml的id:stuMapper.shanchu”,实体:s);对应stuMapper.xml的** DELETE FROM stu where uid=#{uid}**
6.创建上一步实体s
stu s = new stu();
s.setUid(7);
7.事务一定要commit(没有不执行)
sqlSession .commit();
8.关闭
sqlSession .close();
结果:
查询表中删除成功:
删除第二种简单写法(根据id的简单删除)
(1)在映射文件stuMapper.xml
需要parameterType参数类型(id是integer类型),不需要返回值
#{uid}:#{}括号里是要填实体stu.java对应属性的名字uid
<delete id="shanchu2" parameterType="integer">
DELETE FROM stu where uid=#{uid}
</delete>
(2)编写测试类
也是一样成功的
修改
(上面有的步骤就不再重复啦~)
(1)在映射文件stuMapper.xml
需要parameterType参数类型(修改的是实体),不需要返回值
#{name},#{pwd},#{uid}:#{}括号里是要填实体stu.java对应属性的名字
<update id="xiugai" parameterType="com.nky.myapplication.stu">
UPDATE stu set name = #{name},pwd =#{pwd} WHERE uid = #{uid}
</update>
(2)编写测试类
在java下的包com.nky.myapplication下创建javamain测试类
1.写主方法
2.读sqlMapper.xml:Resources.getResourceAsStream(“sqlMapper.xml”);
3. new SqlSessionFactoryBuilder() 用 .build方法(resourceAsStream);
4. 打开连接 build .openSession();
5.sqlSession .update(“stuMapper.xml的id:stuMapper.xiugai”,实体:s);对应stuMapper.xml的** UPDATE stu set name = #{name},pwd =#{pwd} WHERE uid = #{uid}**
6.创建上一步实体s
stu s = new stu();
s.setUid(5);
s.setName(“aaa”);
s.setPwd(“123”);
7.事务一定要commit(没有不执行)
sqlSession .commit();
8.关闭
sqlSession .close();
结果:
查询表中修改成功:
注意:增删改是需要commit