基本的小项目是用的三层结构,什么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(); } }