Java web开发
前言
我将使用MyBits+Tomcat+Severlet开发1个图书管理系统,以熟悉Java Web开发过程。
一、Project Lombok
在编写Java项目时,尤其想要对类私有字段进行操作时,需要在类中定义大量的set/get方法,即使是IDEAR可以自动生产,也会使代码变得不简洁。
而使用Lombok+注解就可以很优雅地解决代码冗余的问题;
Lombok在javac进行编译的时候,根据代码的注解,对原代码进行代码添加从而产生新的代码被编译。
1.下载Lombok JAR包
首先我们需要去Lombok官网下载它的JAR包。
2.IDEAR下载Lombok插件
3.@AllArgsConstructor
package com.test; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @AllArgsConstructor //生成带所有属性的构造器方法 //Student student = new Student(100, "小根", "男" @NoArgsConstructor(staticName = "create") //Student student1 = Student.create(); public class Student { Integer sid; String name; String sex; }
4.@Getter 和@Setter注解
package com.test; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; @Accessors(chain = true) //对象支持链式操作 @Setter //自动生成所有字段的set方法 @Getter //自动生成所有字段的get方法 @AllArgsConstructor //自动生成带所有字段参数的构造方法 new Student(1, "张根", true); class Student { Integer sid; String name; @Getter(AccessLevel.PRIVATE) //设置Pricate属性 boolean sex; }
5.@ToString注解
package com.test; import lombok.*; import lombok.experimental.Accessors; @ToString(includeFieldNames = false, exclude = {"sex"}) @Setter //自动生成所有字段的set方法 @Getter //自动生成所有字段的get方法 @AllArgsConstructor //自动生成带所有字段参数的构造方法 new Student(1, "张根", true); class Student { // @ToString.Include(rank = 1) Integer sid; String name; boolean sex; }
6.@EqualsAndHashCode注解
package com.test; import lombok.*; import lombok.experimental.Accessors; @EqualsAndHashCode //重写Equals和HashCode方法 @ToString @AllArgsConstructor class Student { Integer sid; String name; boolean sex; }
7.@Data
代表设置了@Setter、@Getter、.@EqualsAndHashCode、@ToString所有注解,一旦使用@Data注解就不建议此类有继承关系。
package com.test; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data //代表设置了@Setter、@Getter、.@EqualsAndHashCode、@ToString所有注解 public class Student { Integer sid; String name; String sex; }
8.@Value
@Value注解与@Data注解类似,但是并不会生成@Setter,所有成员属性都是final的。
@Value // public class Student { Integer sid; String name; Strin
9.@SneakyThrows和@Cleanup
package com.test; import lombok.Cleanup; import lombok.SneakyThrows; import java.io.FileInputStream; import java.io.InputStream; public class Main { @SneakyThrows //自动生成TryCatcj语句块 public static void main(String[] args) { @Cleanup //自动调用Close方法 InputStream inputStream = new FileInputStream("lombok.jar"); } }
10.@Builder
package com.test; import lombok.*; @Builder //Student.StudentBuilder student = Student.builder().sid(1).name("小根").sex("男"); public class Student { Integer sid; String name; String sex; }
二、MyBatis
MyBatis是Java中1个半自动化的ORM框架;
1.初识MyBatis
MyBatis配置文件
<?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"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.0.98:3306/zhanggen"/> <property name="username" value="weike"/> <property name="password" value="weike@123"/> dataSource> environment> environments> <mappers> <mapper url="file:conf/staffMapper.xml"/> mappers> configuration>mybatis-config.xml
mapper(映射器)配置文件
<?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="staffMapper1"> <select id="selectStaff" resultType="com.test.entity.Staffs"> select * from staffs; select> <select id="selectOne" resultType="com.test.entity.Staffs"> select * from staffs where id= #{id}; select> mapper>staffMapper.xml
映射类
package com.test.entity; import lombok.Data; @Data public class Staffs { String username; Integer age; double salary; }
操作数据库
package com.test; import com.sun.xml.internal.ws.api.message.HeaderList; import com.test.entity.Staffs; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.FileInputStream; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Main { public static void main(String[] args) throws Exception { //读取数据库配置文件,创建1个数据连接工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("./conf/mybatis-config.xml")); //打开1个Sessio开启SQL自动提交 try (SqlSession session = sqlSessionFactory.openSession(true);) { //查询列表 ListstaffList = session.selectList("selectStaff"); staffList.forEach(System.out::println); //查询单条数据 Staffs staff2 = session.selectOne("selectOne", 2); System.out.println(staff2.getUsername()); } } }
2.Mybatis配置文件
注意Mybatis的配置项是有先后顺序的;
<?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> <typeAliases> <typeAlias alias="Staff" type="com.test.entity.Staffs"/> typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.0.98:3306/zhanggen"/> <property name="username" value="weike"/> <property name="password" value="weike@123"/> <property name="poolMaximumActiveConnections" value="300"/> <property name="poolMaximumIdleConnections" value="0"/> <property name="poolMaximumCheckoutTime" value="20000"/> <property name="poolTimeToWait" value="20000"/> <property name="poolPingEnabled" value="true"/> <property name="poolPingConnectionsNotUsedFor" value="3600000"/> <property name="poolPingQuery" value="select 1"/> dataSource> environment> environments> <mappers> <mapper resource="com/test/mapper/staffMapper.xml"/> mappers> configuration>
3.基本增删改查
映射器配置文件
<?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.test.mapper.MyMapper"> <resultMap id="staffMap1" type="Staff555"> <result column="username" property="username"/> <result column="age" property="age"/> <result column="salary" property="salary"/> resultMap> <select id="selectStaff" resultMap="staffMap1"> select * from staffs; select> <select id="selectOne" resultMap="staffMap1"> select * from staffs where id= #{id}; select> <insert id="addStaff"> insert into staffs(username, age, salary) values (#{username},#{age},#{salary}) insert> <update id="updateStaff"> UPDATE staffs SET username=#{username},age=#{age},salary=#{salary} WHERE id=#{id}; update> <delete id="deleteStaff"> delete from staffs where id=#{id}; delete> mapper>
映射器配置接口
package com.test.mapper; import com.test.entity.Staffs; import java.util.List; public interface MyMapper { ListselectStaff(); Staffs selectOne(Integer id); Integer addStaff(Staffs staff); Integer updateStaff(Staffs staff); Integer deleteStaff(int id); }
映射器配置类
package com.test.entity; import lombok.Data; @Data public class Staffs { Integer id; String username; Integer age; double salary; }
操作数据库
package com.test; import com.sun.xml.internal.ws.api.message.HeaderList; import com.test.entity.Staffs; import com.test.mapper.MyMapper; import org.apache.ibatis.io.ResolverUtil; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.FileInputStream; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Main { public static void main(String[] args) throws Exception { try (SqlSession session = MybatisUtil.getsession(true)) { //1.查询多条记录 MyMapper mapper = session.getMapper(MyMapper.class); mapper.selectStaff().forEach(System.out::println); //2.查询单条记录 System.out.println(mapper.selectOne(2).getUsername()); //3.增加 Staffs newStaff = new Staffs(); newStaff.setUsername("张大千1"); newStaff.setAge(181); newStaff.setSalary(111.1); System.out.println(mapper.addStaff(newStaff)); //4.删除数据 mapper.deleteStaff(27); //5.修改数据 Staffs updateStaff = new Staffs(); updateStaff.setUsername("张大千"); updateStaff.setSalary(122.3); updateStaff.setAge(122); updateStaff.setId(2); mapper.updateStaff(updateStaff); } } }
参考