第⼗四章 案例实战MyBatis3.X玩转查询和新增操作

1集 新版Mybatis开发必备调试之控制台打印Sql

简介:讲解Mybatis在控制台打印sql

Mybatis使⽤流程 :

  • 创建mybatis-confifig.xml 全局的配置⽂件
  • 创建XXXMapper.xml配置⽂件
  • 创建SqlSessionFactory
  • SqlSessionFactory创建SqlSession对象
  • SqlSession执⾏增删改查CRUD

内置的⽇志⼯⼚提供⽇志功能, 使⽤log4j配置打印sql,添加依赖 

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.30</version>
</dependency>

 

在应⽤的classpath中创建名称为 log4j.properties 的⽂件 

#如果写error的话,只会在报错的时候显示执行的SQL语句
log4j.rootLogger=debug, stdout
#项目的名字
log4j.logger.XJ.com..MybatisDemo=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 2 Mybatis实战参数别名使⽤之查询视频列表

简介:讲解Mybatis查询视频列表和参数别名的使⽤ 

查询视频列表,返回 List
        查询⼀样,结果使⽤List 接收
两种取别名方式:
<typeAliases>
    <typeAlias type="Xj.com.MybatisDemo.domain.Video" alias="Video"></typeAlias>
    <!--&lt;!&ndash;package取别名,别名一般是类名&ndash;&gt;-->
    <!--<package name="Xj.com.MybatisDemo.domain"></package>-->
</typeAliases>
常⽤的查询
        默认参数查询
                单个参数,可以使⽤别名,也可以使⽤默认的名称,默认名称的话可以随意
使⽤参数别名
模糊查询
mysql ⾃带函数使⽤

 mapper.xml文件:

<select id="queryVideoByPointAndTitleLike" resultType="Video" parameterType="Video">
        select * from video
        where point = #{point}and
        title like concat("%",#{title},"%")
    </select>

mapper接口:

//查询评分8.8,标题包含JavaScript行
    List<Video> queryVideoByPointAndTitleLike(Video video);

 Video实体类:

public class Video {
    private int id;
    private String title;
    private String summary;
    private String CoverImg;
    private int price;
    private Date CreateTime;
    private int Cid;
    private double point;

    public int getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public String getCoverImg() {
        return CoverImg;
    }

    public void setCoverImg(String coverImg) {
        CoverImg = coverImg;
    }

    public int getPrice() {
        return price;
    }

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

    public Date getCreateTime() {
        return CreateTime;
    }

    public void setCreateTime(Date createTime) {
        CreateTime = createTime;
    }

    public int getCid() {
        return Cid;
    }

    public void setCid(int cid) {
        Cid = cid;
    }

    public double getPoint() {
        return point;
    }

    public void setPoint(double point) {
        this.point = point;
    }

    @Override
    public String toString() {
        return "Video{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", summary='" + summary + '\'' +
                ", CoverImg='" + CoverImg + '\'' +
                ", price=" + price +
                ", CreateTime=" + CreateTime +
                ", Cid=" + Cid +
                ", point=" + point +
                '}';
    }

}

 测试类:

 //模糊查询测试
    @Test
     public void LikeSelecttest(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        VideoMapper mapper = sqlSession.getMapper(VideoMapper.class);

        Video video = new Video();
        video.setPoint(8.8);
        video.setTitle("JavaScript");
        //查询评分位8.8,标题包含JavaScript行
        List<Video> videos = mapper.queryVideoByPointAndTitleLike(video);
        System.out.println(videos.toString());
    }

运行结果:

 

重点:参数记得取别名,⽅便识别和使⽤ 

 

3 Mybatis 配置驼峰字段映射java对象和数据库字段 

 简介:讲解Mybatis配置驼峰字段到java

数据库字段是下划线, java 属性是驼峰,怎么查询映射上去?
        ⽅法⼀: select cover_img as coverImg from video // 多字段怎么办

Mybatis⾃带配置( 加在⽂件顶部)

<!-- 下划线⾃动映射驼峰字段 -->
<settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

 

 

  <select id="queryVideoByPointAndTitleLike" resultType="Video" parameterType="Video">
        select * from video
        where point = #{point}and
        title like concat("%",#{title},"%")
    </select>

mapper接口:

//查询评分8.8,标题包含JavaScript行
    List<Video> queryVideoByPointAndTitleLike(Video video);

测试类:

 @Test
     public void LikeSelecttest() throws ParseException {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        VideoMapper mapper = sqlSession.getMapper(VideoMapper.class);

        Video video = new Video();
        video.setPoint(8.8);
        video.setTitle("JavaScript");
        //查询评分位8.8,标题包含JavaScript行
        List<Video> videos = mapper.queryVideoByPointAndTitleLike(video);

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String CreateTime =    dateFormat.format(videos.get(0).getCreateTime());

        //字符串转换为Date类型
        Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(CreateTime);


        videos.get(0).setCreateTime(date);
        System.out.println(CreateTime);

        System.out.println(videos.toString());

    }

 运行结果:

CreateTime和Cid也映射上去了。 

 

 4 Mybatis⼊参parameterType和取值类型讲解

简介:讲解 Mybatis ⼊参 parameterType 和取值类型讲解
  • parameterType 参数类型
    • 可以是基本类型
parameterType="java.lang.Long"
parameterType="java.lang.String
  • 可以是Java集合List或者Map

parameterType="java.util.Map"
parameterType="java.util.List"
  •  可以是Java⾃定义对象
parameterType="net.xdclass.online_class.domain.Video"

 取参数值,具体某个字段的类型,从java类型映射到数据库类型

  • 例⼦ #{title, jdbcType=VARCHAR}
  • 注意:
    • 多数情况不加是正常使⽤,但是如果出现报错:⽆效的列类型,则是缺少 jdbcType;
      • 只有当字段可为 NULL 时才需要 jdbcType 属性
        常⻅的数据库类型和java 列席对⽐
        JDBC Type                             Java Type
        CHAR                                        String
        VARCHAR                                 String
        LONGVARCHAR                       String
        NUMERIC                                 java.math.BigDecimal
        DECIMAL                                  java.math.BigDecimal
        BIT                                            boolean
        BOOLEAN                                boolean
        TINYINT                                   byte
        SMALLINT                               short
        INTEGER                                 INTEGER
        INTEGER                                 int
        BIGINT                                     long
        REAL                                        float
        FLOAT                                      double
        DOUBLE                                   double
        BINARY                                     byte[]
        VARBINARY                              byte[]
        LONGVARBINARY                    byte[]
        DATE                                         java.sql.Date
        TIME                                          java.sql.Time
        TIMESTAMP                              java.sql.Timestamp
        CLOB                                         Clob
        BLOB                                         Blob
        ARRAY                                       Array
        DISTINCT                                  mapping of underlying type
        STRUCT                                    Struct
        REF                                            Ref
        DATALINK                                  java.net.URL

5 Mybatis实战插⼊语法之视频新增和⾃增主键

简介:讲解Mybatis插⼊语法的使⽤和如何获得⾃增主键

新增⼀条视频记录 

Mapper.xml文件:

<!--插入一条记录 useGeneratedKeys返回插入的id值-->
    <insert id="add" parameterType="Video" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
        insert into video(`title`,`price`,`create_time`,`c_id`,`point`)
        value(#{title,jdbcType=VARCHAR},
        #{price,jdbcType=INTEGER},#{CreateTime,jdbcType=DATE},
        #{Cid,jdbcType=INTEGER},#{point,jdbcType=DOUBLE})
    </insert>

VideoMapper接口:

//新增一条记录,并且自动返回插入的id且映射到对象中
    int add(Video video);

测试类:

 //插入测试
    @Test
    public void AddVideoTest(){
        Video video = new Video();
        video.setTitle("自学课程");
        video.setCreateTime(new Date());
        video.setPrice(44);
        video.setCid(6);
        video.setPoint(9.9);
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        VideoMapper mapper = sqlSession.getMapper(VideoMapper.class);
        mapper.add(video);
        //提交事务
        sqlSession.commit();


        System.out.println("插入完之后,id会自动映射到该对象中:"+video);

        SqlSessionUtil.CloseSqlSession();
    }

运行结果:返回了自增id的值并且自动映射到对象中

 6 Mybatis实战foreach批量插⼊语法之视频批量插⼊

批量插⼊多条视频记录

foreach: ⽤于循环拼接的内置标签,常⽤于 批量新增、in查询等常⻅ 

包含以下属性:
        collection:必填,值为要迭代循环的集合类型,情况有多种
        ⼊参是List 类型的时候, collection 属性值为 list
        ⼊参是Map 类型的时候, collection 属性值为 map key
        item:每⼀个元素进⾏迭代时的别名
        index:索引的属性名,在集合数组情况下值为当前索引值,当迭代对象是 map 时,这个值是 map的 key
        open:整个循环内容的开头字符串
        close:整个循环内容的结尾字符串
        separator: 每次循环的分隔符
<!--批量插⼊-->
<insert id="addBatch"
parameterType="net.xdclass.online_class.domain.Video"
useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
INSERT INTO `video` ( `title`, `summary`, `cover_img`, `price`,
`create_time`, `point`)
VALUES
<foreach collection="list" item="video" separator=",">
 
(#{video.title,jdbcType=VARCHAR},#{video.summary,jdbcType=VARCHAR},#
{video.coverImg,jdbcType=VARCHAR},
#{video.price,jdbcType=INTEGER},
#{video.createTime,jdbcType=TIMESTAMP},#{video.point,jdbcType=DOUBLE})

</foreach>

 如果批量插⼊要获取⾃增id, 可以按照单条记录获得⾃增id的⽅式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值