1.Maven

        Maven简介:在总结之前有必要浅谈一下Maven

1.1什么是Maven,Maven有什么用,为什么要使用Maven?

        在我们使用JavaWeb的过程中,肯定有关于java 的jar包的苦恼,而且随着项目工程的不断增大,需要添加的依赖和jar包也不断的增多,每一个新的Jar包都需要去Maven镜像仓库去寻找Jar包,极其繁琐的过程不仅使程序员很苦恼,也使得工程的占用资源越来越大,而且在版本迭代中还会存在一定的冲突,为了解决这些问题,Maven技术就出现了。

        简单来说Maven是用来对项目中一些jar的管理。 通过pom.xml文件来管理这些jar包。通过坐标的形式来管理。

1.2如何使用Maven

        下载好Maven后,重要是配置环境变量,跟idea的JAva_Home一样需要配置Maven_Home的环境变量,以便可以在任意路径下打开找到,然后再Dos窗口中输入mvn -version验证是否配置成功,基本的环境配置好后,接下来就需要在IDEA中关联Maven,如下图所示

         还有一个重要的这个设置只是设置了当前项目maven与IDEA的关联,下次打开IDEA后还需要重新关联,有一个初始化设置如下图,做法跟上图一样

         接下来创建好Maven的普通工程后需要在pom.xml中引入相应的jar坐标(jar包),具体jar包可以去MAven镜像仓库中去选择加入,注意的是这个仓库是国外的网址下载引入的速度比较慢,可以选择阿里的阿里云镜像,感兴趣的可以去百度一波配置一下。

   1.3注意   

 注意的是创建的Mavenu普通工程的版本是1.0的,许多jar包不兼容,在这里推荐把web.xml文件给替换了

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
</web-app>

        2.Mybatis 

2.1 mybatis简介

        MyBatis 是支持普通 SQL 查询存储过程高级映射的优秀==持久层框架==。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录. 半自动化框架。

2.2如何使用mybais以及常用的配置映射

        首先下载jar包,然后再mybatis.xml的config配置核心文件,下面的是maven 和mybatis的一些常用映射文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybatis07</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--mysql驱动依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
        <!--mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.11</version>
        </dependency>
    </dependencies>
</project>
<?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>

    <properties resource="db.properties"/>
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="param1" value="value1"/>
        </plugin>
    </plugins>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverName}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="Mymappar/a.xml" />
        <mapper resource="Mymappar/OrderMapper.xml" />
        <mapper resource="Mymappar/UserMapper.xml" />
        <mapper resource="Mymappar/ClassMapper.xml" />
        <mapper resource="Mymappar/BookMapper.xml" />
    </mappers>

</configuration>

        需要注意的是要配置日志文件和db的属性集(db.properties)

        log4j的引用能让代码再控制台上更加的清晰

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

        单个Mapper.xml配置 一个Mapper.xml对应一个dao ,对应的操作一张表。

<?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">

<!--namespace 命名空间-->
<mapper namespace="com.aaa.qy136.mapper.PeopleMapper">
    <insert id="addPeople">
      /*标签内部直接写sql语句*/
      insert  into people values (0,'张四',18);
    </insert>
</mapper>

2.3基本使用(CRUD)


<mapper namespace="a">
        <select id="select" resultType="com.lyd.entry.Book">
                select * from book_info where book_id=#{book_id}
        </select>
        <insert id="insert">
                insert into book_info(book_name,book_author,book_price,book_pub)values
                 (#{book_name},#{book_author},#{book_price},#{book_pub})
        </insert>
        <update id="update">
                update book_info set book_name=#{book_name},book_author=#{book_author},book_price=#{book_price},
                        book_pub=#{book_pub}
                 where book_id=#{book_id}
        </update>
        <delete id="delete">
                delete from book_info where book_id=#{book_id}
        </delete>
        <select id="selectAll" resultType="com.lyd.entry.Book">
                select * from book_info
        </select>


</mapper>

2.4系统别名和自定义别名

就是将jdk内部的一些类型,做一个简单的别名。

 自定义别名

使用< typeAliases >< /typeAliases>内部的< typeAlias >

<typeAliases>
    	alias 别名   type实体类的全限定名
    <typeAlias alias="people" type="com.aaa.qy136.pojo.People"></typeAlias>
</typeAliases>

使用< typeAliases >< /typeAliases>内部的< package name="domain.blog"/>


<typeAliases>
	name属性就是实体类所在的全限定包名
  <package name="com.aaa.qy136.pojo"/>
</typeAliases>

2.5进阶使用

①获取主键

<!--
useGeneratedKeys="true" 能获取主键
keyProperty= id  表示将主键赋值给实体类的id属性
-->
<insert id="addPeo1" parameterType="people" useGeneratedKeys="true" keyProperty="id">
    insert  into people values (#{id},#{name},#{age});
</insert>

②.#和$这两个符号的区别

        #{} 实现的是sql语句的预处理参数、之后执行sql中用?号代替、使用时不需要关注数据类型、mybatis自动实现数据类型的转换、并且可以防止sql注入。

其实使用的statement对象是 PreparedStatement一定 已处理对象。

        ${} 实现是sql语句的直接拼接、不做数据类型转换。需要自行判断数据类型、不能防止sql注入。

其实使用的statement对象,直接拼接,不能放置sql注入

③解决数据库列名和实体类列名不一致

第一种是再数据查询语言中起别名让此别名和数据库中的列名一致(不建议使用)

<select id="selectById" resultType="com.lyd.entry.Role">
       
           select * from role where Role_id id=#{id}

</select>

第二种再mapper里使用ResultMap在里面起别名就能完美解决

resultMap id="map" type="com.lyd.entry.Book">

            <id property="id" column="book_id"/>
            <result property="name" column="book_name"/>
            <result property="author" column="book_author" />
            <result property="price" column="book_price" />
            <result property="pub" column="book_pub" />

    </resultMap>

3.链表查询(圈起来这个要考)

3.1简介

在实际开发中肯定不是单单从一张表中获取数据而是更多的采用多表联查进行查询,这时候就需要判断表间关系是多对一,多对多,或一对多,其中多对一是最常用的一种表间关系.

3.1.1多对一 链表查询

<mapper namespace="com.lyd.dao.OrdersDao">

    <resultMap id="My1" type="com.lyd.entry.Orders">
        <id property="order_Id" column="order_Id" />

        <association property="users" javaType="com.lyd.entry.Users" autoMapping="true" >
            <id property="user_id" column="user_id" />
        </association>
    </resultMap>
    <select id="select1" resultMap="My1">
        select * from orders o join  users u on o.user_id=u.user_id where o.order_id=#{order_id}
    </select>

3.1.2多对一 嵌套查询

4.动态Sql

4.1简介

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

​ 使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。

​ 如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。

  • if where

  • choose (when, otherwise)

  • set

  • foreach

 where标签可以帮助添加where关键字,并且把第一个and或者or给取出

 <select id="findBy1"   resultMap="map">
            select * from book_info
            <where>
                <if test="bookname!=null and bookname!=''">
                    and book_name=#{bookname}
                </if>
                <if test="author!=null and author!=''">
                    and book_author=#{author}
                </if>

            </where>
    </select>

choose when otherwise 和where

when表示当条件满足时直接跳出下面的分支when和where(有点类似break) ,如果都不满足则执行otherwise

<select id="findBy2" resultMap="map">
        select * from book_info
        <where>
            <choose>
                <when test="bookname!=null and bookname!=''">
                    and book_name=#{bookname}
                </when>
                <when test="author!=null and author!=''">
                    and book_author=#{author}
                </when>
                <otherwise>
                    and book_price>35
                </otherwise>

            </choose>
        </where>
    </select>

set标签 可以修改字段,并且可以自动添加set关键字,且去除最后的语句的逗号

<update id="update" >
        update book_info
        <set>
            <if test="name!=null and name!=''">
                book_name=#{name},
            </if>
            <if test="author!=null and author!=''">
                book_author=#{author},
            </if>
            <if test="price!=null ">
                book_price=#{price},
            </if>
            <if test="pub!=null and pub!=''">
                book_pub=#{pub},
            </if>

        </set>
        where book_id=#{id}batchDelete
    </update>

       foreach : 批量操作:了解一下 批量删除,新增!
            批量操作一般都由两种方式解决:
        第一种:java代码中循环调用sql语句
        第二种:使用mybatis动态sql的foreach

<select id="selectPostIn" resultType="domain.blog.Post">
          SELECT *
          FROM POST P
          WHERE ID in
          <foreach item="item" index="index" collection="list"
              open="(" separator="," close=")">
                #{item}
          </foreach>
        </select>

模糊查询 like 和concat拼接字符串函数

<select id="findBy3" resultMap="map">
select
<include refid="sqp01" />
from book_info
<where>
    <if test="bookname!=null and bookname!=''">
            book_id like concat('%',#{book_id},'%')
    </if>
</where>

</select>

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐