2023/4/10--开始学习具体的开发知识

文章讨论了传统的三层架构,包括DAO层、服务层和Servlet层,并介绍了如何使用JDBC进行数据库操作。然后过渡到现代框架如Spring和MyBatis,它们简化了这些过程。SpringBoot作为管理和自动化配置Spring的应用工具,进一步简化了开发流程。MyBatis作为一个持久层框架,解决了SQL硬编码的问题。文章通过代码示例展示了MyBatis如何管理SQL语句。
摘要由CSDN通过智能技术生成
    基本的小项目是用的三层结构,什么dao层sever层sevelet层这样可以链接数据库并且在前端返回的数据做响应。但是现在市面上的主流技术是用框架。学spring boot前要学习spring,学这个之前要学习MyBatis,在这个之前要学习JDBC然后JDBC是有点熟悉的。据我所知现在是这个样子。spring boot是管理spring的一个东西,spring是管理框架的一个东西,然后MyBatis是一个框架。而JDBC是一个变成结构思想。注:JDBC-MyBatis-spring-spring boot.

JDBC:就是建立数据库链接:

整合后的:
public class DbUtil {
    public static final String URL = "jdbc:mysql://localhost:3306/imooc";
    public static final String USER = "liulx";
    public static final String PASSWORD = "123456";
    private static Connection conn = null;
    static{
        try {
            //1.加载驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            //2. 获得数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
​
    public static Connection getConnection(){
        return conn;
    }
}
​
//模型
package liulx.model;
​
import java.util.Date;
​
public class Goddess {
​
    private Integer id;
    private String user_name;
    private Integer sex;
    private Integer age;
    private Date birthday; //注意用的是java.util.Date
    private String email;
    private String mobile;
    private String create_user;
    private String update_user;
    private Date create_date;
    private Date update_date;
    private Integer isDel;
    //getter setter方法。。。
}
​
//---------dao层--------------
package liulx.dao;
​
import liulx.db.DbUtil;
import liulx.model.Goddess;
​
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
​
public class GoddessDao {
    //增加
    public void addGoddess(Goddess g) throws SQLException {
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql
        String sql = "INSERT INTO imooc_goddess(user_name, sex, age, birthday, email, mobile,"+
            "create_user, create_date, update_user, update_date, isdel)"
                +"values("+"?,?,?,?,?,?,?,CURRENT_DATE(),?,CURRENT_DATE(),?)";
        //预编译
        PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行
​
        //传参
        ptmt.setString(1, g.getUser_name());
        ptmt.setInt(2, g.getSex());
        ptmt.setInt(3, g.getAge());
        ptmt.setDate(4, new Date(g.getBirthday().getTime()));
        ptmt.setString(5, g.getEmail());
        ptmt.setString(6, g.getMobile());
        ptmt.setString(7, g.getCreate_user());
        ptmt.setString(8, g.getUpdate_user());
        ptmt.setInt(9, g.getIsDel());
​
        //执行
        ptmt.execute();
    }
​
    public void updateGoddess(){
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql, 每行加空格
        String sql = "UPDATE imooc_goddess" +
                " set user_name=?, sex=?, age=?, birthday=?, email=?, mobile=?,"+
                " update_user=?, update_date=CURRENT_DATE(), isdel=? "+
                " where id=?";
        //预编译
        PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行
​
        //传参
        ptmt.setString(1, g.getUser_name());
        ptmt.setInt(2, g.getSex());
        ptmt.setInt(3, g.getAge());
        ptmt.setDate(4, new Date(g.getBirthday().getTime()));
        ptmt.setString(5, g.getEmail());
        ptmt.setString(6, g.getMobile());
        ptmt.setString(7, g.getUpdate_user());
        ptmt.setInt(8, g.getIsDel());
        ptmt.setInt(9, g.getId());
​
        //执行
        ptmt.execute();
    }
​
    public void delGoddess(){
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql, 每行加空格
        String sql = "delete from imooc_goddess where id=?";
        //预编译SQL,减少sql执行
        PreparedStatement ptmt = conn.prepareStatement(sql);
​
        //传参
        ptmt.setInt(1, id);
​
        //执行
        ptmt.execute();
    }
​
    public List<Goddess> query() throws SQLException {
        Connection conn = DbUtil.getConnection();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
​
        List<Goddess> gs = new ArrayList<Goddess>();
        Goddess g = null;
        while(rs.next()){
            g = new Goddess();
            g.setUser_name(rs.getString("user_name"));
            g.setAge(rs.getInt("age"));
​
            gs.add(g);
        }
        return gs;
    }
​
    public Goddess get(){
        Goddess g = null;
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql, 每行加空格
        String sql = "select * from  imooc_goddess where id=?";
        //预编译SQL,减少sql执行
        PreparedStatement ptmt = conn.prepareStatement(sql);
        //传参
        ptmt.setInt(1, id);
        //执行
        ResultSet rs = ptmt.executeQuery();
        while(rs.next()){
            g = new Goddess();
            g.setId(rs.getInt("id"));
            g.setUser_name(rs.getString("user_name"));
            g.setAge(rs.getInt("age"));
            g.setSex(rs.getInt("sex"));
            g.setBirthday(rs.getDate("birthday"));
            g.setEmail(rs.getString("email"));
            g.setMobile(rs.getString("mobile"));
            g.setCreate_date(rs.getDate("create_date"));
            g.setCreate_user(rs.getString("create_user"));
            g.setUpdate_date(rs.getDate("update_date"));
            g.setUpdate_user(rs.getString("update_user"));
            g.setIsDel(rs.getInt("isdel"));
        }
        return g;
    }
}
​
整合前:
    static void test() throws SOLException, ClassNotFoundException {
        //1.注册驱动
        DriverManager.registerDrivert(new com.mysql.jdbc.Driver());
        System.setProperty("jdbc.drivers", "com.mysgl,jdbc.Driver");
        Class.forName("com.mysql.jdbc.Driver”);// 推荐方式
        // 2.建立连接
        String url ="jdbc:mysql://localhost:3306/jdbc"
        String user = "root;
        String password =""
        Connection conn = DriverManager.getConnection(url,user,password);
        // 3创建语句
        Statement st = conn.createStatement();
        // 4.执行语句
        ResultSet rs = st.executeQuery("select * from user");
        //5处理结果
        while (rs.next()) {
            System.out.println(rs.getObject(1)+"\t"+
                               rs.getObject(2)+"\t"+
                               rs.getObject(3)+"\t"+rs.getObject(4));
        }
        // 6.释放资源
        rs.close();
        st.close();
        conn.close();
    }

MyBatis一款优秀的持久层框架:

1.创建user表,添加数据

2.创建模块,导入模块

3.编写MyBatis核心配置文件-->替换链接信息,解决硬编码问题

里面一共有三个配置文件logback.xml--mybatis.xml--UserMapper.xml三个文件

logback.xml--一些不知道的配置文件

mybatis.xml--一些数据库连接信息,链接数据库的一些信息,像是用户名,密码什么的,要在<mappers>里面把UserMapper.xml的文件路径写进去,一般情况下都是同级的文件。所以直接写文件名就行。

UserMapper.xml--一些加载sql的映射文件,可以理解为数据库的地址

4.编写SQL映射文件-->同意管理sql语句,解决硬编码问题,UserMapper.xml--一些加载sql的映射文件,可以理解为对数据库语句的命名

<mapper namespace="test">

         select * from tb_User;

</mapper>

5.编码

(1)定义POJO类-----定义一个数据库的实体类

(2)加载核心配置文件,获取SqlSessionFactory对象

(3)获取SqlSession对象,执行SQL语句

(4)释放资源-----234步如下图所示,是一个平级于实体类文件夹的一个运行程序

public class MyBatisDemo {
    public static void main(String[] args) throws IOException {
        //1.加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";//定义配置文件的路径,因为在根目录下所以直接写文件名
        //通过Resource类(上面引入的包)的getResourceAsStream方法获取到的resource传给inputStream字节输入流
        InputStream inputStream = Resources.*getResourceAsStream*(resource);
        //利用SqlSessionFactoryBuilder()对象里面的build方法再把上面的inputStream输入流返回给sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //2.获取
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3.执行sql
        List<User> users = sqlSession.selectList("test.selectAll");
        System.*out*.println(users);
        //4.释放资源
        sqlSession.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值