mybatis快速入门进阶篇-执行CRUD操作-typeAliases别名-接口绑定

目录结构

在这里插入图片描述

所需jar包

https://download.csdn.net/download/weixin_44201223/89160447?spm=1003.2166.3001.6637.1

1.创建数据表(book)

# 创建book表
create table book(
    id int auto_increment primary key,
    name varchar(255) ,
    price double ,
    num int
);

2.mybatis.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
    <!-- 声明可以使用的环境(如:开发环境(development),测试环境(testing),生产环境
(production),三个环境是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境) -->
        <environment id="development">
        <!-- 使用原生 JDBC 事务 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- POOLED数据源的配置, property配置JDBC四个变量-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/数据库"/>
                <property name="username" value="root"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>
    <!-- MyBatis查找映射文件 -->
    <mappers>
        <mapper resource="dao/mapper/BookMapper.xml">
         </mapper>
    </mappers>
</configuration>

3.JDBCUtil封装

public class JDBCUtil {

    public static SqlSession getSqlSession() throws Exception{
    	//1.通过Resources查找全局mybatis配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
        //2.使用SqlSessionFactoryBuilder的使用工厂设计模式
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream );
        //3.生成SqlSession
        SqlSession sqlSession= sqlSessionFactory.openSession();
        //4.返回SqlSession
        return sqlSession;
    }

    public static void close(SqlSession session){
    	//资源关闭
        session.close();
    }
}

4.实体类(BookModel)

private int id;
    private String name;//书的名称
    private double price;//书的价格
    private int num;//书的数量

    public BookModel() {
    }

    public BookModel(String name, double price, int num) {
        this.name = name;
        this.price = price;
        this.num = num;
    }

    public BookModel(int id, String name, double price, int num) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.num = num;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "BookModel{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", num=" + num +
                '}';
    }

5.dao层接口

	//增删改默认返回类型为int,不需要设置
    /**
     * 添加图书
     * @param bookModel:添加类型
     * @return 1表示成功,0表示失败
     */
    int insertBook(BookModel bookModel);

    /**
     * 修改图书
     * @param bookModel:修改对象,以id为条件
     * @return 1表示成功,0表示失败
     */
    int updateBook(BookModel bookModel);

    /**
     * 根据id删除数据
     * @param id:删除数据的id
     * @return 1表示成功,0表示失败
     */
    int delectBook(int id);

    /**
     * 查看所有信息
     * @return :添加到集合中返回
     */
    List<BookModel> findAll();
	
	/**
     * 查询指定数据
     * @param map:根据书的名称,书的价格
     * @return 
     */
    BookModel findBook(Map<String,Object> map);
	
	/**
     * 分页查询:返回当前页的数据
     * @param map 传入参数为查询第几页,一页显示条数)
     * @return
     */
    List<BookModel> getBookListByPagePraram(Map<String,Integer> map);

6.dao层映射文件

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.BookDao">
	<!-- id:指定dao方法名
		 parameterType:传参类型
		 resultType:返回值类型
	-->
    <!-- 添加 -->
    <insert id="insertBook" parameterType="model.BookModel">
        insert into book(name, price, num) values(#{name},#{price},#{num})
    </insert>
	<!-- 修改  -->
    <update id="updateBook" parameterType="model.BookModel">
        update book set name = #{name} where id = #{id}
    </update>
	<!-- 删除(根据id) -->
    <delete id="delectBook" parameterType="int">
        delete from book where id = #{id}
    </delete>
    <!-- 查询所有 -->
    <select id="findAll" resultType="model.BookModel">
        select * from book
    </select>
	<!-- 查询(根据书的名称和书的价格 -->
    <select id="findBook" parameterType="map" resultType="model.BookModel">
        select * from book where name = #{name} and price = #{price}
    </select>
    <!-- 分页查询 -->
	<select id="getBookListByPagePraram" parameterType="map" resultType="model.BookModel">
        select * from book limit 2,2
    </select>
</mapper>

7.测试类

public class BookAppMain {
    public static void main(String[] args) throws Exception{
        //insertBook();
        //updateBook();
        //delectBook(3);
        //findBookAll();
        //findBook();
        //getBookListByPagePraram(2,2);
    }
    //添加
    public static void insertBook() throws Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //初始化BookModel
        BookModel bookModel = new BookModel("斗破苍穹", 211, 1);
        //指定dao方法,传入BookModel实例,返回1/0
        int row = sqlSession.insert("dao.BookDao.insertBook",bookModel);
        //把最终的sql真正执行,必须添加,添加后才能在数据库中显示成功操作的数据
        sqlSession.commit();
        //释放资源
        JDBCUtil.close(sqlSession);
    }
    //修改
    public static void updateBook() throws Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //初始化BookModel
        BookModel bookModel = new BookModel();
        bookModel.setId(3);
        bookModel.setName("一人之下");
        //未设置参数,保留原来数据
        sqlSession.update("dao.BookDao.updateBook",bookModel);
        //提交到数据库
        sqlSession.commit();
        //释放资源
        JDBCUtil.close(sqlSession);
    }
    //删除
    public static void delectBook(int id) throws  Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //根据id删除
        sqlSession.delete("dao.BookDao.delectBook",id);
        //提交到数据库
        sqlSession.commit();
         //释放资源
        JDBCUtil.close(sqlSession);
    }
    //查看所有
    public static void findBookAll() throws Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //查询到所有BookModel实例,映射到集合中
        //.selectList()返回值则为一个集合列表
        //.selectOne()返回值一个 Object 对象,返量一条数据或是一个变量值如 int...
        //.selectMap()查询结果中通过某列的值取到这行数据,通过 Map<key,resultType 控制>
        List<BookModel> list = sqlSession.selectList("dao.BookDao.findAll");
        //遍历集合
        for (BookModel book : list){
            System.out.println(book);
        }
        //查询操作可以不执行commit()方法
        //sqlSession.commit();
        //释放资源
        JDBCUtil.close(sqlSession);
    }
    //根据名称和价格查看
    public static void findBook() throws Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //设置需要查询对象
        Map<String,Object> map = new HashMap<>();
        map.put("name", "斗罗大陆1");
        map.put("price", 58.0);
        //根据name,price查询
        BookModel bookModel = sqlSession.selectOne("dao.BookDao.findBook",map);
        //查询操作可以不执行commit()方法
        //sqlSession.commit();
        System.out.println(bookModel);
        //释放资源
        JDBCUtil.close(sqlSession);
    }
    //分页查询
    public static void getBookListByPagePraram(Integer pageName,Integer pageSize) throws Exception{
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        Map<String, Integer> map = new HashMap<>();
        Integer pageStart = (pageName - 1);
        map.put("pageStart",pageStart);
        map.put("pageSize",pageSize);
        List<BookModel> list = sqlSession.selectList("dao.BookDao.getBookListByPagePraram", map);
        for (BookModel bookModel : list ){
            System.out.println("第" + pageName + "页:" + bookModel);
        }

    }

}

typeAliases 别名

自定义某个类别名

类型别名是为 Java 类型命名一个短的名字。它只和 XML 配置有关, 只用来减少类完全限定名的多余部分。在mybatis.xml设置typeAliases,注意放置位置顺序

	<typeAliases>
		<typeAlias type="类的路径" alias="别名"/>
	</typeAliases>

设置别名测试

mybatis.xml添加typeAliases

把model.BookModel路径起别名为Book

	<typeAliases>
        <typeAlias type="model.BookModel" alias="Book"/>
    </typeAliases>

在BookMapper.xml中使用别名

 <!-- <select id="findAll" resultType="model.BookModel">-->
    <select id="findAll" resultType="Book">
        select * from book;
    </select>

包下所有类命名为别名

给某个包下所有类起别名,别名为类名,不区分大小写, mybatis.xml 中配置

<!-- 加入包下的类名作为传递的别名 -->
	<typeAliases>
		<package name="包的路径"/>
	</typeAliases>

XXMapper.xml 中通过类名引用对应的 resultType=“User” 或是 resultType=“user”,不用在写包的路径

接口绑定

让创建好的对应接口与 mapper.xml 对应(对应是指:BookDao与BookrMapper.xml一一对应),由 mybatis 生成接口的实现类,通过调用接口对象获取到 Bookmapper.xml 中编写的 sql 方法。
框架的spring与mybatis结合正是使用此方式

	//修改上面添加方法,使用接口绑定方式
    public static void insertBook2() throws Exception{
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        BookModel bookModel = new BookModel("大头儿子小头爸爸", 211, 1);
        //int row = sqlSession.insert("dao.BookDao.insertBook",bookModel);
        //接口绑定,绑定上路径地址,文件地址更改时,自动变更
        BookDao mapper = sqlSession.getMapper(BookDao.class);
        //相当于调用接口实现类方法一样,直接调用方法,添加参数
        int row = mapper.insertBook(bookModel);
        //把最终的sql真正执行,必须添加,添加后才能在数据库中显示成功操作的数据
        sqlSession.commit();
        System.out.println(row > 0 ? "添加成功" : "添加失败");
        JDBCUtil.close(sqlSession);
    }
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值