javaweb

JSON

1.json格式

{key:value,key:value}
var person={
"name":"hanxzioalei",
“age”:18,

}

2.json数组格式

[{key:value,key:value},{key:value,key:value}]
<script>
    var person={
        "name":"韩晓磊",
        "age":18

    }
    //将json转换为字符串
    var str=JSON.stringify(person);
    console.log(str);
    //模拟str是服务端传递给我们客户端的,我们在拿到服务器传递过来的json字符串之后,需要将Ⅶ转换成json对象才能解析出数据
    var p=JSON.parse(str);
    console.log(p);

</script>

正则表达式

在这里插入图片描述
在这里插入图片描述

 //匹配验证:检验一个字符串中是否包含o字母
    var str="hello"
    //编写一个用于校验的正则表达式
    var reg1=/o/
    //使用正则表达式去检验字符串
    console.log(reg1.test(str));


    //匹配读取:读取一个字符串中第一个l字母
    //编写一个正则表达式
    var reg2=/l/
    //使用正则表达式去读取字符串
   console.log( str.match(reg2))
    //匹配替换:将字符换中第一个o替换为@
    //编写一个正则表达式
    var reg3=/o/
    //使用正则表达式替换内容
    //'@'只能用小括号包裹,大括号无效
    console.log( str.replace(reg3,'@'))
    // search()方法 检查字符串中是否有hel字符串
    //有返回下标,没有返回-1
    console.log(str.search(/hel/));
 var reg3=/o/gi
 表示全局(g)查找o字母,并且忽略(i)大小写
var reg3=/^h/
判断字符串是否以h开头
var reg3=/h$/
判断字符串是否以$结尾
var reg3=/[a-zA-Z]{11}/
判断字符串是否包含11个字母
var reg3=/^[a-zA-Z]{11}$/
判断字符串有且只包含11个字母

注意:
验证是调用正则表达式的方法,
而匹配查找与匹配替换是要查找字符串的放法。

多行查找  m
如果没有使用多行查找,那么你的字符串无论是几行,都被当成一行匹配
var str1="hello\nword"
var str2="hello"
var reg=/hello$/m
reg.test(str1)  //true
reg.test(str2)   //true

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
表示谁就在谁后面加
常用正则直接百度

 var str2='a'
 var reg4=/[a]{2}/
    console.log(reg4.test(str2))
    //只要是字符串中某字符出现次数大于要检测的数量,就为true

在这里插入图片描述

xml

第一行写xml约束

<?xml version="1.0" encoding="utf-8"?>

第二行是根标签,有且只有一个根标签,根标签名称随便起。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Tomcat

tomcat是一个免费的,开放源代码的Web应用服务器,是Apache软件基金会项目中的一个核心项目,由Apache ,Sun和一些公司以及个人共同开发而成,深受Java爱好者的喜爱,是一款比较流行的web应用服务器。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述查看默认端口号占用情况

netstat -aon|findstr "8080"

去任务管理器中结束 PID为8980的进程

![在这里插入图片描述](https://img-blog.csdnimg.cn/e40782c696664bdfa5c2a6b3ed860e4b.png
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下载:

https://tomcat.apache.org/

安装:

解压即可,
卸载:删除就可以
在这里插入图片描述

启动:

去bin目录下找startup.bat启动
在这里插入图片描述

关闭

在这里插入图片描述

部署

在这里插入图片描述
常用第三种,热部署

静态项目与动态项目

在这里插入图片描述

将Tomcat集成到IDEA中,并且创建javaEE的项目,部署项目。

JDBC

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述导jar包不会问问别人

/**
 * jdbc快速入门
 */

public class jdbc {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
        //这里的cj MySql5之后的jar包可以省略
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接
        String url="jdbc:mysql://localhost:23306/atguigudb";
        String username="root";
        String password="0071hanxiaolei";
       //返回的是一个connection 对象
      Connection conn= DriverManager.getConnection(url,username, password);
      //3.定义一个sql语句
        String sql="update account set money=4000 where id=1";
        //4.获取执行sql的对象statement
        Statement stmt=conn.createStatement();
        //5.执行sql
        int count =stmt.executeUpdate(sql);
        //6.处理结果
        System.out.println(count);
        //7.释放资源   后人先出
        stmt.close();
        conn.close();


    }
}

JDBC API 详解

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
处理事务要用异常处理方式

 try {
            //开启事务
            conn.setAutoCommit(false);
            //5.执行sql

            int count1 =stmt.executeUpdate(sql1);
            int count2 =stmt.executeUpdate(sql2);
            //6.处理结果
            System.out.println(count1);
            System.out.println(count2);
            // 提交事务
            conn.commit();
        } catch (Exception throwables) {
            //如果有异常回滚事务
            conn.rollback();
            throwables.printStackTrace();
        }

在这里插入图片描述
在执行DML之后会返回大于0的数,而DDL不一定会返回大于0的数也可能是0.
在这里插入图片描述
在这里插入图片描述

public class jdbc_ResultSet {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
//        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接
        String url="jdbc:mysql://localhost:23306/atguigudb";
        String username="root";
        String password="0071hanxiaolei";
       //返回的是一个connection 对象
      Connection conn= DriverManager.getConnection(url,username, password);
     //3.定义SQL语句
        String sql="select * FROM account";
        //4.获取statement对象
        Statement stmt =conn.createStatement();
        //5.执行sql
        ResultSet rs = stmt.executeQuery(sql);
        //6.处理结果  遍历rs中的所有数据
        //光标向下移动一行,并且判断是否有数据
        while(rs.next()){
            //列数是从1开始的,不是从0开始
            int id=rs.getInt(1);
            String name=rs.getString (2);
            double money=rs.getDouble(3);
            System.out.println(id);
            System.out.println(name);
            System.out.println(money);
            System.out.println("-----------------");

        }

        //7.释放资源
        rs.close();
        stmt.close();
        conn.close();


    }
}

在这里插入图片描述
步骤:

1.定义实体类Account
2.查询数据,封装到Account对象中
3.Account对象存入ArrayList集合中

Account类

public class Account {
    //对应表中的字段
    private int id;
    private  String name;
    private  double money;

    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 getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}

2.查询数据,将数据封装到Account对象里
3.将Account 对象存入ArrayList集合中

public class jdbc_ResultSet {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
//        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接
        String url="jdbc:mysql://localhost:23306/atguigudb";
        String username="root";
        String password="0071hanxiaolei";
       //返回的是一个connection 对象
      Connection conn= DriverManager.getConnection(url,username, password);
     //3.定义SQL语句
        String sql="select * FROM account";
        //4.获取statement对象
        Statement stmt =conn.createStatement();
        //5.执行sql
        ResultSet rs = stmt.executeQuery(sql);
        //创建集合
        List<Account> list =new ArrayList<>();
        //6.处理结果  遍历rs中的所有数据
        //光标向下移动一行,并且判断是否有数据
        while(rs.next()){
            Account account = new Account();
            //列数是从1开始的,不是从0开始
            int id=rs.getInt(1);
            String name=rs.getString (2);
            double money=rs.getDouble(3);
            //赋值
            account.setId(id);
            account.setName(name);
            account.setMoney(money);
            //存入集合
            list.add(account);
        }
        System.out.println(list);
        //7.释放资源
        rs.close();
        stmt.close();
        conn.close();
    }
}

在这里插入图片描述在这里插入图片描述注意这里的sql与变量的拼接方式
SQL注入

' or '1' = '1

在这里插入图片描述
在这里插入图片描述

public class jdbc_PreparedStatement {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
//        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获取连接
        String url="jdbc:mysql://localhost:23306/atguigudb";
        String username="root";
        String password="0071hanxiaolei";
       //返回的是一个connection 对象
      Connection conn= DriverManager.getConnection(url,username, password);

      //模拟接受用户名和密码
        String name="zhangsan";
        String pwd ="asdfghjkl";

      //3.定义一个sql语句
        String sql ="select * FROM tb_user Where name = ? and password= ?";
        //获取preparedStatement对象
        PreparedStatement pstmt = conn.prepareStatement(sql);


        //4.获取执行sql的对象statement
        Statement stmt=conn.createStatement();
        //设置?的值
        pstmt.setString(1,name);
        pstmt.setString(2,pwd);
        //执行sql
        ResultSet rs=pstmt.executeQuery();  //此处不用再传sql语句了,返回了一个ResultSet 结果集
        //判断是否登录成功
        if (rs.next()){
            System.out.println("登录成功");
        }else{
            System.out.println("登录失败");
        }


        //7.释放资源   后人先出
        rs.close();
        pstmt.close();
        conn.close();


    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述Druid配置文件

driverClassName=com.mysql.cj.jdbc.Driver
#URL连接数据库的URL,其中travel(以下面例子来说)为连接的数据库,后面的参数可不改但不删
url=jdbc:mysql://localhost:23306/atguigudb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
characterEncoding=utf-8
#安装mysql时候设置的用户与密码
username=root
password=0071hanxiaolei
#初始化物理连接的个数
initialSize=5
#最大连接池数量
maxActive=10
#获取连接时最大等待时间
maxWait=3000
#用来检测连接是否有效的sql
validationQuery=SELECT 1
#保证安全性!
testWhileIdle=true

操作数据库步骤
1.查询所有数据

public class DruidDemo {
    public static void main(String[] args) throws Exception {
        //加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("jdbc_demo/src/druid.properties"));
        //获取连接池对象
      DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//      获取数据库连接 Connection
        Connection conn = dataSource.getConnection();

        //定义sql语句
        String sql="select * FROM account";
        //获取Prepare对象
        PreparedStatement pstmt =conn.prepareStatement(sql);
        //设置参数
        //执行sql
        ResultSet rs=pstmt.executeQuery();
        //处理结果  List<Account>  封装Account对象,装载List集合
        Account account=null;
        List<Account> accountList=new ArrayList<>();
        while (rs.next()){
            //获取数据
            int id = rs.getInt("id");
            String name = rs.getString("name");
            double money = rs.getDouble("money");
            //封装Account对象
            account=new Account();
            account.setId(id);
            account.setName(name);
            account.setMoney(money);
            //装载集合
            accountList.add(account);
        }
        System.out.println(accountList);

        //释放资源
        rs.close();
        pstmt.close();
        conn.close();
        //查看当前文件所在路径
//        System.out.println(System.getProperty("user.dir"));
    }
}

2.向数据库添加数据

public class DruidDemo2 {
    public static void main(String[] args) throws Exception {
        //模拟接收页面提交的数据
        String name="香飘飘";
        double money=50000;
        //加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("jdbc_demo/src/druid.properties"));
        //获取连接池对象
      DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//      获取数据库连接 Connection
        Connection conn = dataSource.getConnection();

        //定义sql语句
        String sql="insert into account(name,money) values(?,?);";
        //获取Prepare对象
        PreparedStatement pstmt =conn.prepareStatement(sql);
        //设置参数
        pstmt.setString(1,name);
        pstmt.setDouble(2,money);

        //执行sql
        int count=pstmt.executeUpdate(); //返回的是影响的行数
        //处理结果  List<Account>  封装Account对象,装载List集合
        System.out.println(count>0);

        //释放资源

        pstmt.close();
        conn.close();

        //查看当前文件所在路径
//        System.out.println(System.getProperty("user.dir"));
    }
}

3.根据id修改

public class DruidDemo3 {
    public static void main(String[] args) throws Exception {
        //模拟接收页面提交的数据
        String name="臭飘飘";
        double money=80000;
        int id=3;
        //加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("jdbc_demo/src/druid.properties"));
        //获取连接池对象
      DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//      获取数据库连接 Connection
        Connection conn = dataSource.getConnection();

        //定义sql语句
        String sql="update account set name=?,money=? where id=?";
        //获取Prepare对象

        PreparedStatement pstmt =conn.prepareStatement(sql);
        //设置参数
        pstmt.setString(1,name);
        pstmt.setDouble(2,money);
        pstmt.setInt(3,id);
        //执行sql
        int count=pstmt.executeUpdate(); //返回的是影响的行数
        //处理结果  List<Account>  封装Account对象,装载List集合
        System.out.println(count>0);

        //释放资源
        pstmt.close();
        conn.close();

        //查看当前文件所在路径
//        System.out.println(System.getProperty("user.dir"));
    }
}

4.根据id删除数据

public class DruidDemo4 {
    public static void main(String[] args) throws Exception {
        //模拟接收页面提交的数据
        int id=3;
        //加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("jdbc_demo/src/druid.properties"));
        //获取连接池对象
      DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//      获取数据库连接 Connection
        Connection conn = dataSource.getConnection();

        //定义sql语句
        String sql="delete from account where id=?";
        //获取Prepare对象

        PreparedStatement pstmt =conn.prepareStatement(sql);
        //设置参数

        pstmt.setInt(1,id);
        //执行sql
        int count=pstmt.executeUpdate(); //返回的是影响的行数
        //处理结果  List<Account>  封装Account对象,装载List集合
        System.out.println(count>0);

        //释放资源
        pstmt.close();
        conn.close();

        //查看当前文件所在路径
//        System.out.println(System.getProperty("user.dir"));
    }
}

Maven

![在这里插入图片描述](https://img-blog.csdnimg.cn/6b482fe33a9f4c46be0c11d831932e5e.png在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/83ca4e6fe35849cb836fdebc87d18b81.png
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MyBatis

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

配置文件

1.logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
        </encoder>
    </appender>

    <logger name="com.itheima" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>

    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

2.mybatis_config.xml
官网复制的,用于数据库的连接,参数改成自己的

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
               <!--数据库连接信息-->
               <!--编写mybatis核心配置文件,解决硬编码问题-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:23306/mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="0071hanxiaolei"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
         <!-- 加载sql的映射文件-->
        <!--统一管理sql语句,解决硬编码问题-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

3.UserMapper.xml
写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">

<!--
    namespace:名称空间
    id:这条查询语句的唯一标识
    resultType:返回值类型
-->

<mapper namespace="test">
    <select id="selectAll" resultType="com.ithema.pojo.User">
        select * from tb_user;
    </select>
</mapper>

4.pom.xml
maven配置文件,导包用的

<dependencies>
    <!--  mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
    <!--  mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
    <!--  junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
<!--        添加logback依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>

    </dependencies>

User类

public class User {

    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String addr;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}

MybatisDemo类

public class MybatisDemo {

    public static void main(String[] args) throws IOException {
        //1.加载mybatis的核心代码,获取SqlSessionFactory (官网cv过来)
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //重点在sqlsession
        //2.获取SqlSession 对象,用他来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        List<User> users = sqlSession.selectList("test.selectAll");

        //4.处理结果
        System.out.println(users);

        //5.释放资源
        sqlSession.close();

    }
}

在这里插入图片描述在这里插入图片描述1.首先定义一个接口,接口最好单独存放在一个包内,然后在资源文件中定义一个与接口包名一样的
文件,把UserMapper放进去。这样在编译时,接口与配置文件才会在一起。
在这里插入图片描述
2.
设置UserMapper.xml中的namespace为mapper接口的全限定名
在这里插入图片描述3.接口中的方法

public interface UserMapper {
    //看返回的结果是一个还是集合,一个就用User对象.
    List<User> selectAll();
}

4.编码

public class MybatisDemo2 {

    public static void main(String[] args) throws IOException {
        //1.加载mybatis的核心代码,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession 对象,用他来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
//        List<User> users = sqlSession.selectList("test.selectAll");
        //3.1获取UserMapper接口代理对象
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        List<User> users=userMapper.selectAll();
        //4.处理结果
        System.out.println(users);

        //5.释放资源
        sqlSession.close();

    }
}

5.细节
修改mybatis_config.xml
在这里插入图片描述整套代码格式,看mybatis_demo文件
路径:

D:\javaweb\java\javacode\mybatis_demo

案例
在这里插入图片描述
在这里插入图片描述
BrandMapper.xml

<mapper namespace="com.ithema.mapper.BrandMapper">

<!--    由于下滑线转驼峰命名,会有数据映射不上,所有用resultMap来映射
         id:唯一标识
         type:映射的类型,支持别名,忽略大小写

         resultMap使用步骤:
         1.定义<resultMap>标签
         2.<slect>标签中,使用resultMap属性替换resultType属性
-->

    <resultMap id="brandResultMap" type="Brand">
<!--        这里只写不一样的映射-->
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>

<!--    直接映射resultMap中的就行-->
    <select id="selectAll" resultMap="brandResultMap">
        select *
        from mybatis.tb_brand;
    </select>
</mapper>

在这里插入图片描述在这里插入图片描述

<!--
 参数占位符
 1. #{} :会将其替换成? 为了防止sql注入
 2。${} :拼接字符串 存在sql注入问题
 使用时机:
 1.参数传递一定要用:#{}
 2.表名或者列名不固定的时候:${}

 特殊字符处理
 1.转义字符
 2.CDATA区 在里面写字符   大写CD回车就行
-->

    <select id="selectById" resultMap="brandResultMap">
        select *
        from mybatis.tb_brand where id = #{id};

    </select>

在这里插入图片描述
在这里插入图片描述

详细内容看
D:\javaweb\java\javacode\mybatis_demo

在这里插入图片描述

 <!--    动态多条件查询
    if 完成条件判断
    test;逻辑表达式
    问题:
    如果没有第一个条件,第二个条件语句多一个and, 可以利用恒等式解决 1=1
    官方解决方式  <where><where>代替where,可以自动去掉第二个条件为第一个条件时的and
    -->
    <select id="selectByCondition" resultMap="brandResultMap">
        select *
        from mybatis.tb_brand
        <where>
              <if test="status!=null">
                status = #{status}
              </if>
            <if test="companyName!=null and companyName!=''">
             and company_name like #{companyName}
            </if>
            <if test="brandName!=null and brandName!=''">
                and brand_name like #{brandName};
            </if>
        </where>

    </select>

在这里插入图片描述
在这里插入图片描述只要提供choose里的一个值就行。

<!--    单条件动态查询
where标签可以动态查看查询条件是否正确,如果一个查询条件都没有,where将不匹配条件
-->
    <select id="selectByConditionSingle" resultMap="brandResultMap">
        select *
        from mybatis.tb_brand
       <where>
        <choose>
            <when test="status!=null">
                status=#{status}
            </when>
            <when test="companyName!=null and companyName!=''">
                and company_name like #{companyName}
            </when>
            <when test="brandName!=null and brandName!=''">
                and brand_name like #{brandName}
            </when>
        </choose>
       </where>
    </select>

在这里插入图片描述

<insert id="add" useGeneratedKeys="true" keyProperty="id">
        insert into mybatis.tb_brand(brand_name, company_name, ordered, description, status)
        values (#{brandName},#{companyName},#{ordered},#{description},#{status});
    </insert>

这里的useGeneratedKeys="true" keyProperty="id"为了能获取到主键的值

/**
     * 添加
     *
     */
    void add(Brand brand);
/**
     * 添加
     * 需要提交事务,事务回滚,否则数据添加不成功
     * 如果在获取SqlSession对象时,添加参数true 则表示自动提交事务
     *
     */
    @Test
    public void testAdd() throws IOException {
//        模拟页面上动态传过来的参数
        int status=0;
        String companyName="波导手机";
        String  brandName="波导";
        String description="波导手机,手机中的战斗机";
        int ordered=100;

        //给对象参数法设置对象参数
        Brand brand =new Brand();
        brand.setStatus(status);
       brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setDescription(description);
        brand.setOrdered(ordered);

        //1.获取sqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession 对象,用他来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3获取BrandMapper接口代理对象
        BrandMapper brandMapper=sqlSession.getMapper(BrandMapper.class);

        //4.执行方法
        brandMapper.add(brand);
        //5.提交事务
        sqlSession.commit();
        //这里是获取主键的值
        Integer id = brand.getId();
        System.out.println(id);
        //5.释放资源
        sqlSession.close();
    }

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

<update id="update">
        update mybatis.tb_brand
        set brand_name   =#{brandName},
            company_name =#{companyName},
            ordered      =#{ordered},
            description  =#{description},
            status       =#{status}
        where id = #{id};
    </update>
/**
     * 修改
     *
     */
    @Test
    public void testUpdate() throws IOException {
//        模拟页面上动态传过来的参数
        int id =7;
        int status=0;
        String companyName="波导小手机";
        String  brandName="波导公司";
        String description="波导手机,手机中的垃圾";
        int ordered=200;

        //给对象参数法设置对象参数
        Brand brand =new Brand();
        brand.setStatus(status);
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setDescription(description);
        brand.setOrdered(ordered);
        brand.setId(id);

        //1.获取sqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession 对象,用他来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3获取BrandMapper接口代理对象
        BrandMapper brandMapper=sqlSession.getMapper(BrandMapper.class);

        //4.执行方法
       int count= brandMapper.update(brand);
        //5.提交事务
        sqlSession.commit();
        System.out.println(count);

        //5.释放资源
        sqlSession.close();
    }

在这里插入图片描述

<!--修改数据-->
    <update id="update">
        update mybatis.tb_brand
        <set>
        <if test="brandName!=null and brandName!=''">
            brand_name =#{brandName},
        </if>
        <if test="companyName!=null and companyName!=''">
            company_name =#{companyName},
        </if>
        <if test="ordered!=null and ordered!=''">
            ordered =#{ordered},
        </if>
        <if test="description!=null and description!=''">
            description =#{description},
        </if>
        <if test="status!=null ">
            status =#{status}
        </if>
        </set>
        where id = #{id};
    </update>

如果一个修改数据都没有,那么set就多余了,或者最后一个条件没有,多个逗号语法错误,所以用标签
在这里插入图片描述
在这里插入图片描述

<delete id="deleteByIds">
        # mybatis中会将数组参数封装成一个Map集合
        # 默认:array=数组
        # 也可以使用@param注解改变map集合的默认key的名称
        delete from mybatis.tb_brand where id
        in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
        ;

    </delete>
  /**
     * 批量删除
     *
     */
    void deleteByIds(@Param("ids") int[] ids);

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

HTTP

![在这里插入图片描述](https://img-blog.csdnimg.cn/0d45173fdfc9411ab07a8ce4b0c7ae04.png
![在这里插入图片描述](https://img-blog.csdnimg.cn/3481af04f74a458bbda238b08418f791.png
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

Servlet

在这里插入图片描述在这里插入图片描述provided 只在打包 编译时有效,运行时无效。防止与tomcat冲突

在这里插入图片描述在这里插入图片描述

@WebServlet(urlPatterns = "/demo2",loadOnStartup = 0)
public class servlet_demo2 implements Servlet {

    /**
     * 初始化方法
     * 调用时机:默认情况下,Servlet被第一次访问时,调用
     * 通过loadOnStartup  默认为-1,如果改为正整数:就成了服务器启动时调用init()
     *调用次数:1
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init>>>>");

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 提供服务的方法
     * 调用时机:每一次servlet被访问时调用
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello word");
    }

    /**
     * 销毁方法
     * 调用时机:内存释放或者服务器关闭时,servlet会被销毁
     */
    @Override
    public void destroy() {
        System.out.println("destroy");
    }
    @Override
    public String getServletInfo() {
        return null;
    }


}

在这里插入图片描述

@WebServlet("/demo3")
public class servlet_demo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get>>>>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post>>>>>");
    }
}

在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/754632a9afde45be9d431611081d8d30.png

Request Response

在这里插入图片描述在这里插入图片描述在这里插入图片描述

@WebServlet("/demo4")
public class servlet_demo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //get请求逻辑

        System.out.println("GET>>>>");
        //获取所有参数的map集合
        Map<String,String[]> map =req.getParameterMap();
        for (String key : map.keySet()) {
            System.out.print(key+':');
            //获取值
            String[] values=map.get(key);
            for (String value:values){
                System.out.print(value+" ");
            }
            System.out.println();
        }
        //1.根据key,获取多个参数值
        String[] hobbys=req.getParameterValues("hobby");
        for (String hobby : hobbys) {
            System.out.print(hobby);
        }
        //2.根据key,获取单个参数值,getParameter比较常用
        String username=req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        System.out.println(password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //post 请求逻辑
       
        System.out.println("POST>>>>");
        //获取所有参数的map集合
        Map<String,String[]> map =req.getParameterMap();
        for (String key : map.keySet()) {
            System.out.print(key+':');
            //获取值
            String[] values=map.get(key);
            for (String value:values){
                System.out.print(value+" ");
            }
            System.out.println();
        }
        //1.根据key,获取多个参数值
        String[] hobbys=req.getParameterValues("hobby");
        for (String hobby : hobbys) {
            System.out.print(hobby);
        }
        //2.根据key,获取单个参数值,getParameter比较常用
        String username=req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        System.out.println(password);

    }
}

在这里插入图片描述Idea模板创建servlet
在这里插入图片描述

在这里插入图片描述

//post 请求逻辑
        //解决控制台中文乱码问题
        req.setCharacterEncoding("UTF-8"); //设置字符输入流的编码
//2.根据key,获取单个参数值,getParameter比较常用
        String username=req.getParameter("username");
        //解决get控制台乱码问题
        username=new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

 System.out.println("response>>");
        System.out.println("demo8");

        //重定向
        //1.设置响应状态码为 302
        response.setStatus(302);
        //2.设置响应头  Location
         //动态获取虚拟目录
        String contextPath=request.getContextPath();
        
         //  response.setHeader("Location","/tomcat_demo3/demo9");
        //简化重定向方法
        response.sendRedirect(contextPath+"/demo9");

一定要写虚拟目录

在这里插入图片描述
在这里插入图片描述

 //设置响应数据的格式及编码
        response.setContentType("text/html;charset=utf-8");
        //1.获取字符输出流
        PrintWriter writer =response.getWriter();
        writer.write("你好");
        writer.write("<h1>你好<h1>");

在这里插入图片描述

 //1.读取文件
        FileInputStream fis = new FileInputStream("d://images/a1.png");
        //2.获取response 字节输出流
        ServletOutputStream os = response.getOutputStream();

        //3.完成流的copy
//        byte [] buff= new byte[1024];
//        int len=0;
//        while ((len= fis.read(buff))!=-1){
//            os.write(buff,0,len);
//        }
        //maven导入 io依赖 使用工具类简化字节流复制操作
        IOUtils.copy(fis,os);
        fis.close();

ssm

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值