mybatis框架封装了jdbc的各种操作,极大的简化了对数据库的操纵。接下来用具体案例实现数据库的增删查改。项目及配置可以看我之前的文章mybatis基础和mapper代理开发。
项目结构及配置文件
建立如下的目录结构,并将xml配置好,可以看我之前的文章参考。新建数据库并创建表。
建立如下的配置文件
如上图两个映射类对应数据库表的两个表
xml的文件:(两个都要配置namespace,id,resultType,sql语句做修改)
<?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.UserMapper"> <!--不用mapper代理为路径不能随便命名-->
<select id="selectAll" resultType="pojo.User">
select * from tb_user;
</select>
</mapper>
要注意的三点使namespace,用mapper代理不能随便命名,要用映射类所在路径命名,如UserMapper类在mapper下,所以命名为mapper.UserMapper,resultType是返回的数据类型,为javabean的类。其他的映射类道理相同。
映射接口的内容:(两个映射接口)
package mapper;
import pojo.User;
import java.util.List;
public interface UserMapper {
List<User> selectAll();
}
要注意的有三点,默认的修饰词使public、注意返回值的数据类型、查询的一行的数据类型使一个list元素、selectAll()是配置文件的id,同时也是一个方法调用xml中配置的sql语句。其他的映射类也是如此。
还要创建pojo的软件包用于编写,两个数据库表的javabean对象。
最后就是配置mybatis-config.xml可以看我之前的文章。要注意的最后的mappers标签要加载所有的映射对象的xml配置文件(注意路径在mapper下)。放在resources中和mapper同级。也可以直接把包加载进来
还有就是pom.xml看之前的文章。
mybatis增加数据
在对应的映射对象的配置文件xml中写入,标签和sql的语法一致。
<!--添加语句,主键返回添加时一般无法获取当前添加的id需要设置 useGeneratedKeys="true" keyProperty="id"这两个属性就可以获取当前id了-->
<insert id="addOneColumn" useGeneratedKeys="true" keyProperty="id" parameterType="pojo.Brand">
insert into tb_brand(brand_name,company_name,ordered,description,status)
values (#{brand_name},#{company_name},#{ordered},#{description},#{status})
</insert>
#{}是占位符用于替换参数,参数来源于addOneColumn方法。其在映射类中和 List selectAll()在同一接口中;,如下
void addOneColumn(Brand brand); //数据库添加一行数据
这里插入传递的参数是一个javabean对象,需要在xml的insert标签中加入parameterType属性,其值是javabean所在的路径。也可以是其他类型,如list,map等,详情可以去官网查看。
mybatis删除数据
xml的配置
<!--删除-->
<delete id="deleteById">
delete from tb_brand where id=#{id}
</delete>
映射类的方法
//删除操作
void deleteById(int id);
mybatis查找数据
<select id="selectById" resultType="pojo.Brand">
select * from tb_brand where id=#{id};
</select>
//根据id查询
List<Brand> selectById(int id);
mybatis修改数据
<!--修改-->
<update id="updateOne">
update tb_brand
set
brand_name=#{brand_name},
company_name=#{company_name},
ordered=#{ordered},
description=#{description},
status=#{status}
where id=#{id}
</update>
//修改操作
void updateOne(Brand brand);
动态sql
对于上面的操作要实现针对某个字段而不是全部需要适应mybatis提供的内置标签代替关键字,如修改是只对某个字段修改其他不变:
<!--某一字段的修改动态更新不用set关键字,1是容易出现多一个逗号,2是没有数据set多余,用mybatis提供的<set>标签-->
<update id="updateTwo">
update tb_brand
<set>
<if test="brand_name!=null and brand_name!='' ">brand_name=#{brand_name},</if>
<if test="company_name!=null and company_name!=''">company_name=#{company_name},</if>
<if test="ordered!=null and ordered !='' ">ordered=#{ordered},</if>
<if test="ordered !=null and ordered !='' ">description=#{description},</if>
<if test="status !=null ">status=#{status}</if>
</set>
where id=#{id}
</update>
用标签替换了原本的set关键字,用标签进行判断选择要修改的字段。详情可见mybatis官网:mybatis动态sql
调用增删查改函数
上面已经编辑和配置好了函数和文件,接下来编写测试类MybatisDemo
package mybatis;
import mapper.UserMapper;
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 pojo.User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisDemo {
public static void main(String[] args) throws IOException{
//从 XML 文件中构建 SqlSessionFactory 的实例
String resource = "mybatis-config.xml";
InputStream inputStream = null;
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//从 SqlSessionFactory 中获取 SqlSession
SqlSession session = sqlSessionFactory.openSession();
//执行sql
//List<User> users=session.selectList("test.selectAll");
//System.out.println(users);
//后者不用直接执行sql而使用mapper代理开发
//获取UserMapper接口的代理对象
UserMapper userMapper=session.getMapper(UserMapper.class); //获取映射对象的类
//调用方法实现增删改查(处了查,其他都没有返回值,可以自定义boolean类型判断,这里没有返回值)
//增(增加的一整行,所以传递的一个javabean对象,先封装对象){ordered},#{description},#{status})
Brand brand =new Brand();
brand.setBrand_name("淘宝");
brand.setCompany_name("阿里巴巴");
brand.setOrdered("30");
brand.setDescription("阿里巴巴已由一家电子商务公司彻底蜕变为以技术驱动,包含数字商业、金融科技、智慧物流、云计算、人地关系文化娱乐等场景的平台,服务数以亿计的消费者和数千万的中小企业。");
brand.setStatus(0);
void userMapper.addOneColumn(brand);
//删(删除的sql是传递id删除一整行)
void userMapper.deleteById(3);
//查(sql语句写的是根据id查所有,有返回值用List存储)
List<Brand> users =userMapper.selectById(1);
System.out.println(users);
//改(上面sql语句是根据id将一行所有数据修改,也封装在对象中)
Brand brand1 =new Brand()
brand.setBrand_name("淘宝");
brand.setCompany_name("阿里巴巴");
brand.setOrdered("30");
brand.setDescription("阿里巴巴已由一家电子商务公司彻底蜕变为以技术驱动,包含数字商业、金融科技、智慧物流、云计算、人地关系文化娱乐等场景的平台,服务数以亿计的消费者和数千万的中小企业。");
brand.setStatus(1);
brand.setId(1);
void userMapper.updateOne(brand1);
//释放资源
session.close();
}
}
要注意的增删改的操作要提交:session.commit();
mybatis的参数传递:
多个不同类型的参数:将参数封装为map集合,并通过param注解更改key的名称,其值就是参数的值。当只有一个参数时就不用了。
POJO的参数类型:可以直接使用,对象的属性名和参数占位符保持一致即可
Map集合 :map的键和参数占位符一致也直接使用。
array,list当数据类型都要加。
上面的都是在xml中配置sql语句通过mapper调用或通过id调用,下面时通过注解定义sql语句,注解比配置文件更简单,不用配置任何xml文件,但是注解只能完成一些简单的sql语句,复杂的任要用xml配置文件
增删改查
@Insert
@Delete
@Update
@Select
//在mapper下的类中定义注解的sql
@Select(“select * from tb_brand where id = #{id}”)
List selet_by_id(int id);
//测试类中调用:
//获取参数
int id=3;
List user1=brandMapper.selet_by_id(id);
System.out.println(user1);
list要加上泛型,<> 中间是javabean对象,由于显示不出来,上面的就都没有。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156330.html