Web应用技术(第十三周/第一次练习/2h)

1.MyBatis入门:

(1)关于两个xml配置文件

MyBatis-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 声明XML版本和编码 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--
MyBatis 配置文件的 DTD 声明,用于验证 XML 配置文件是否符合 MyBatis 的语法规范。
-->
<configuration>
	<!-- 声明类型别名,用于简化 Java 类型的命名,方便在 XML 中引用。 -->
	<!--使用pakage标签,使得name包下所有的类可在后续xml配置中直接简写为类名 -->
	<typeAliases>
	  <package name="com.how2java.pojo"/>
	</typeAliases>
    <!-- 声明环境,用于定义 MyBatis 的运行环境,包括事务管理器和数据源等。 -->
    <environments default="development">
        <environment id="development">
            <!-- 声明事务管理器类型,用于管理数据库事务,包括开启、提交、回滚等操作。 -->
            <transactionManager type="JDBC"/>
            <!-- 声明数据源类型,用于连接数据库,包括数据库驱动、URL、用户名和密码等信息。 -->
            <dataSource type="POOLED">
                <!-- 数据库驱动 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!-- 数据库连接URL -->
                <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
                <!-- 数据库用户名 -->
                <property name="username" value="root"/>
                <!-- 数据库密码 -->
                <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 声明映射器,用于定义数据库操作的 SQL 语句和映射关系。 -->
    <mappers>
        <mapper resource="com/how2java/pojo/Category.xml"/>
    </mappers>
</configuration>

MyBatis 的配置文件,用于配置 MyBatis 的运行环境、数据源、事务管理器和映射器等。其中,
typeAliases标签用于声明类型别名,方便在 XML 中引用 Java 类型;
environments标签用于声明 MyBatis的运行环境,包括事务管理器和数据源等;
dataSource 标签用于连接数据库,包括数据库驱动、URL、用户名和密码等信息;
mappers标签用于声明映射器,定义数据库操作的 SQL 语句和映射关系。

通过这个文件的配置,MyBatis 可以连接数据库并执行SQL 语句,实现数据的持久化和访问。


Category.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明XML版本和编码 -->
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 声明mapper的DTD -->
	<mapper namespace="com.how2java.pojo">
	<!-- 声明mapper的命名空间,用于唯一标识该mapper -->
	    <select id="listCategory" resultType="Category">
	    <!-- 声明查询语句,用于查询表格category_的所有字段 -->
	        select * from category_      
	    </select>
	    <!-- 查询结果映射类型,即将查询结果映射为Category类型 -->
	</mapper>
    <!-- 该mapper用于提供关于Category表格的数据库操作,包括查询、插入、更新、删除等操作。 -->

MyBatis 的映射器文件,用于定义数据库操作的 SQL 语句和映射关系。其中,mapper 标签用于声明映射器的命名空间,唯一标识该映射器;
select 标签用于声明查询语句,用于查询表格 category_的所有字段;resultType 属性用于声明查询结果映射类型,即将查询结果映射为 Category类型。

通过这个文件的配置,MyBatis 可以根据映射器文件中的 SQL 语句和映射关系,执行数据库操作,实现数据的持久化和访问。这个文件提供了关于 Category表格的数据库操作,包括查询、插入、更新、删除等操作。

(2)注意:

  • 本次建立的是一个Java项目,而不是一个动态Web项目;
  • 本次不能与Web项目一样,仅将jar包放在新建的lib文件夹下就可以了,还需要导入
  • 注意文件的位置:

在这里插入图片描述

(3)运行效果:

运行TestMyBatis.java:
在这里插入图片描述


(4)代码:

两个配置文件见上
Category.java:

package com.how2java.pojo;

public class Category {
	private int id;
	private String name;
	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;
	}
	
}


TestMyBatis.java:

package com.how2java;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 com.how2java.pojo.Category;

public class TestMybatis {

	public static void main(String[] args) throws IOException {
		// 配置文件的路径
		String resource = "mybatis-config.xml";
		
		// 读取配置文件
		InputStream inputStream = Resources.getResourceAsStream(resource);
		
		// 根据配置文件构建 SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
		// 打开一个新的 SqlSession
        SqlSession session=sqlSessionFactory.openSession();
        
        // 查询所有的 Category 记录
        List<Category> cs=session.selectList("listCategory");
        for (Category c : cs) {
			System.out.println(c.getName());
		}
		
		// 关闭 SqlSession
		session.close();
	}
}

2.MyBatis的CRUD:

(1)前置准备:

补充CUD所需的xml配置文件
代码如下:
Category.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">

	<mapper namespace="com.how2java.pojo">
	    <!-- 定义一个名为addCategory的插入操作,参数类型为Category -->
	    <insert id="addCategory" parameterType="Category" >
	        insert into category_ ( name ) values (#{name})    
	    </insert>
	    
	    <!-- 定义一个名为deleteCategory的删除操作,参数类型为Category -->
	    <delete id="deleteCategory" parameterType="Category" >
	        delete from category_ where id= #{id}   
	    </delete>
	    
	    <!-- 定义一个名为getCategory的查询操作,参数类型为int,结果类型为Category -->
	    <select id="getCategory" parameterType="_int" resultType="Category">
	        select * from   category_  where id= #{id}    
	    </select>

	    <!-- 定义一个名为updateCategory的更新操作,参数类型为Category -->
	    <update id="updateCategory" parameterType="Category" >
	        update category_ set name=#{name} where id=#{id}    
	    </update>
	    
	    <!-- 定义一个名为listCategory的查询操作,结果类型为Category -->
	    <select id="listCategory" resultType="Category">
	        select * from   category_      
	    </select>	    
	</mapper>

(2)C:

  • 添加代码片段进行插入操作:
//new一个Category对象
Category c = new Category();
//调用c对象的SetName方法
c.setName("Category");
//调用session的insert方法,执行id为addCategory的sql语句
//向数据库中插入c对象
session.insert("addCategory",c);
  • 添加listAll方法,方便在控制台观察:
    private static void listAll(SqlSession session) {
        List<Category> cs = session.selectList("listCategory");
        for (Category c : cs) {
            System.out.println(c.getName());
        }
    }
  • 完整代码:
package com.how2java;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 com.how2java.pojo.Category;

public class TestMybatis {

	public static void main(String[] args) throws IOException {
		// 配置文件的路径
		String resource = "mybatis-config.xml";
		
		// 读取配置文件
		InputStream inputStream = Resources.getResourceAsStream(resource);
		
		// 根据配置文件构建 SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
		// 打开一个新的 SqlSession
        SqlSession session=sqlSessionFactory.openSession();
  
        
        Category c = new Category();
        c.setName("category3");
        session.insert("addCategory",c);
         
        listAll(session);
         
        session.commit();
        session.close();
	}
	
    private static void listAll(SqlSession session) {
        List<Category> cs = session.selectList("listCategory");
        for (Category c : cs) {
            System.out.println(c.getName());
        }
    }
}

  • 运行TestMyBatis.java,观察数据库和控制台:
    在这里插入图片描述

在这里插入图片描述

(3)R:

见MyBatis入门

(4)U:

  • 添加代码片段进行个更新操作:
//先进行查询操作,再进行修改
//因为修改必须要基于一定的对象,没有对象修改啥呢
//查询id为1的元组,返回一个Category对象,用“装”着
        Category c= session.selectOne("getCategory",1);
//调用c的SetName方法,修改c的名字为“”
        c.setName("你好,我被修改了");
//执行SQL语句
        session.update("updateCategory",c);
  • 在这里插入图片描述
    运行TestMyBatis.java,观察数据库和控制台:
    
、

在这里插入图片描述

(5)D:

  • 添加代码片段进行个删除操作:
//在配置文件Category.java中声明的传入的参数类型是Category对象
        Category c = new Category();
        c.setId(1);
        //删除id为1的对象
        session.delete("deleteCategory",c);
  • 运行TestMyBatis.java,观察数据库和控制台:
    在这里插入图片描述

3.MyBatis更多查询:

(1)模糊查询:

  • 在Category.xml中添加代码,即可重复使用的sql语句,id为listCategoryByName:
        <select id="listCategoryByName"  parameterType="string" resultType="Category">
            select * from   category_  where name like concat('%',#{0},'%')
        </select> 
  • 修改listAll方法中的selectList方法的参数,实现查询模糊查询,”具体情况如下:
    private static void listAll(SqlSession session) {
//        List<Category> cs = session.selectList("listCategory");
    	List<Category> cs = session.selectList("listCategoryByName","六");
        for (Category c : cs) {
            System.out.println(c.getName());
        }
    }
  • 运行TestMyBatis.java,观察控制台:

在这里插入图片描述

(4)多条件查询:

  • 在Category.xml中添加代码,即可重复使用的sql语句,id为listCategoryByIdAndName:
	    </select>     
	            <select id="listCategoryByIdAndName"  parameterType="map" resultType="Category">
            select * from   category_  where id> #{id}  and name like concat('%',#{name},'%')
        </select> 
  • 创建一个空的参数映射表,修改listAll方法中的selectList方法的参数,实现查询多条件查询,”具体情况如下:
	private static void listAll(SqlSession session) {
	    // 创建一个空的参数映射表
	    Map<String,Object> params = new HashMap<>();
	    // 向参数映射表中添加两个参数,id 和 name
	    params.put("id", 3);
	    params.put("name", "cat");
	    // 调用 SqlSession 的 selectList 方法执行查询操作
	    // 第一个参数是映射文件中定义的查询语句的 ID,第二个参数是参数映射表
	    List<Category> cs = session.selectList("listCategoryByIdAndName",params);
	    // 遍历查询结果,输出每个 Category 对象的 name 属性
	    for (Category c : cs) {
	        System.out.println(c.getName());
	    }
	}
  • 运行TestMyBatis.java,观察控制台:

在这里插入图片描述

4.关于Map:

Map 是 Java 中的一个泛型类型,它表示一个键值对映射表,其中键的类型为 String,值的类型为 Object。这个类型常用于存储动态参数或结果集,可以根据需要动态添加、删除或修改键值对。

例如,我们可以使用Map来存储学生的成绩,其中键是学生的姓名,值是他们的成绩。以下是一个示例代码:

Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 85);
scores.put("Bob", 90);
scores.put("Charlie", 80);

在上面的代码中,我们使用了HashMap来创建一个Map对象,并使用put()方法向Map中添加键值对。在这个Map中,我们使用学生的姓名作为键,使用他们的成绩作为值。

我们还可以使用get()方法来获取Map中的值。例如,我们可以使用以下代码来获取Bob的成绩:

int bobsScore = scores.get("Bob");

在这个例子中,我们使用了get()方法来获取Bob的成绩,并将其存储在一个整数变量中。

除了HashMap之外,Java中还有其他类型的Map,例如TreeMap和LinkedHashMap。每种类型的Map都有其自己的特点和用途。


最近几天考试较多,mybatis剩余内容周天继续学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值