//Mybatis
String resourse = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resourse);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
userMapper userMapper = sqlSession.getMapper(userMapper.class);
List<User> users = userMapper.selectAll();
System.out.println(users);
sqlSession.close();
//引入jar包后的原生
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false&useSSL=false&serverTimezone=UTC","root","sql666");
String sql = "insert into sqltest (name,age,school) value ('sdf',23,'45')";
Statement stmt = conn.createStatement();
System.out.println(stmt.executeUpdate(sql));
stmt.close();
conn.close();
<?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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="sql666"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/test/userMapper.xml"/>
</mappers>
</configuration>
<dependencies>
<!-- servlet依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- mybits依赖-->
<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.16</version>
</dependency>
</dependencies>
<!--json解析包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<port>80</port>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>14</source>
<target>14</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>13</source>
<target>13</target>
</configuration>
</plugin>
</plugins>
</build>
<?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 指向class映射文件(mapper接口)的位置-->
<mapper namespace="com.test.userMapper">
<select id="selectAll" resultType="com.test.User">
select * from sqltest;
</select>
<select id="insertData" resultType="com.test.User">
insert into sqltest (name,age) value ( #{name},#{age});
</select>
</mapper>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<port>80</port>
</configuration>
</plugin>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
id 顺序排列
ALTER TABLE BN DROP COLUMN id;
ALTER TABLE BN ADD id int NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;
show databases;
drop database if exists hardware_sys;
#创建数据库并指定字符集
create database if not exists question_bank default character set utf8 collate utf8_general_ci;
use hardware_sys;
drop table if exists hardware_sys.user_data;
drop table if exists hardware_sys.hardware_data;
create table if not exists user_data
(
id int primary key auto_increment,
name varchar(20) not null ,
password varchar(50) not null ,
status smallint,
mana smallint
#默认字符集
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
select *
from hardware_data;
#数据库字符
SHOW VARIABLES LIKE 'char%';
set character_set_results =utf8;
创建时设置:
CREATE TABLE T(
A VARCHAR(10) BINARY
);
使用alter修改:
ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
mysql table editor中直接勾选BINARY项。
存放Mybatis的映射类,定义执行SQL语句的函数,传递对应的值
存放定义好的简单java对象
存放调用工具类具体执行SQL语句的接口,imp则对接口进行实现,在servlet中怎直接创建对象调用方法。
作为工具类,创建SqlSessitionFactory 工厂对象,因为此对象可以被复用,用static定义。
服务端文件,对Http请求进行响应,对应的实现与数据库的连接,数据交互。
包含数据库的映射文件,以及mybatis的配置文件
存放前端的页面文件
下载地址:
https://downloads.mysql.com/archives/installer/
所用版本为 (5.7.35)
下载,解压,配置环境变量
或许要cmd输入’services.msc’,启动服务
验证环境变量是否配置好,按下“window+R”键弹出运行框,输入“cmd”进入window命令行,输入“mysql -u root -p”按下回车,再输入密码,按下回车。有welcome则成功。
详细安装教程:
https://blog.csdn.net/weixin_50498482/article/details/124315351
登录参数
mysql -uxxx -pxxx -h127.0.0.1 -p 3306
解压安装即可
点击连接,输入主机端口,用户名,端口来连接到数据库
管理和构建java项目的工具
提供标准项目结构,标准化构建流程,依赖管理机制。
下载解压安装
在maven->conf->settings.xml中配置阿里云的镜像,在mirrors节点下面添加子节点
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
浏览仓库内容
https://developer.aliyun.com/mvn/guide
常用命令
1.compile 编译 2. clean 3. test 4. package 5. install
settings -> 搜索maven -> 配置home path -> 配置文件settings file -> 选择对应文件
选择右侧maven面板 -> 点击+ -> 选择porn.xml文件
没有面板则 view -> appearance -> tool windows bar
持久层框架,简化JDBC开发
持久层 -> 将数据保存到数据库
https://mybatis.net.cn/getting-started.html
maven导入依赖 -> 配置文件mybatis.xml -> 映射文件mapper
IDEA连接数据库
右侧菜单 -> datasource -> mysql -> 填写数据库信息
通过 SqlSession 的 getMapper 获取Mapper接口
下载安装
https://tomcat.apache.org/download-80.cgi
conf -> logging.properties -> consoleHa… encodeing = GBK
connector port = “80”
窗口一闪而过则是,java 环境配置错误
-> 补全目录即可
1.创建web项目,导入依赖
2.定义类实现接口
3.使用@Webservlet(“/path”)注解,配置访问路径
4.浏览器访问
导入依赖
<!-- EasyExcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
<!--通过注解生成setter and getter-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
创建对象
//lombok能创建setter getter 方法
@Setter
@Getter
@ToString
public class question {
//忽视对象中的此成员
@ExcelIgnore
private int id;
//excel表格读取和储存的表头
@ExcelProperty(value = "题目")
private String topic;
@ExcelProperty(value = "选项1")
private String option_o;
}
//将数据写入list集合中
List<question> ques = new ArrayList<>();
for (int i=0;i < 10; i++) {
question qu = new question();
qu.setId(i);
qu.setTopic(i);
qu.setOption_o(i);
ques.add(qu);
}
//写入excel表格
EasyExcel.write("XXX/123.xlsx", //文件路径
question.class) //对象class
.sheet("题目") //表名
.doWrite(ques); //写入集合
//读取excel表格
String filePath = "XXX/123.xlsx";
List<question> list = EasyExcel
.read(filePath)
.head(question.class) //根据class获取表头
.sheet()
.doReadSync();
ApplicationContext.xml
<bean id = "userDao" class="com.colorful.dao.userDaoImp">
<!-- 注入普通数据类型-->
<property name="string" value="123"/>
<!-- 注入集合数据类型-->
<property name="list">
<list>
<value>345</value>
<value>568</value>
</list>
</property>
<property name="map">
<map>
<entry key="name" value="123"/>
<entry key="password" value="123"/>
</map>
</property>
</bean>
<bean id="userDaoService" class="com.colorful.service.userDaoService">
<!-- 注入引用数据类型(userDao对象)-->
<property name="userDao" ref="userDao"/>
</bean>
<!-- 引入其他配置文件(分模块开发)-->
<!-- <import resource="ApplicationContext.xml"/>-->
对应类中
//需要有setter
@Setter
public class userDaoImp implements userDao {
private String string;
private List<String> list;
private Map<String, String> map;
}
//测试
ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
userDaoService service = (userDaoService) ac.getBean("userDaoService");
service.call();
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 导入外部配置文件-->
<context:property-placeholder location="classpath:test.properties"/>
<property name="string" value="${value}"/>
@Setter
@ToString
//组件注解,配置id标识
@Component("userDaoService")
public class userDaoService {
//注入引用类型(ref)
//Resource("userDaoImp")
@Autowired
@Qualifier("userDaoImp")
private userDao userDao;
public void call() {
System.out.println(userDao);
userDao.call();
}
}
<!-- 组件扫描-->
<context:component-scan base-package="com.colorful"/>
com -> config -> springConfiguration.class
//相当于头部文件
@Configurable
//组件扫描
@ComponentScan("com.colorful")
//properties配置文件
@PropertySource("test.properties")
//加载其他配置
@Import({class,class})
public class springConfiguration {
//第三方
/*@Bean("dataSource")
public data dateSource() {
xxx = new xxx;
return xxx
}*/
}
ApplicationContext ac = new AnnotationConfigApplicationContext(springConfiguration.class);
userDaoService service = ac.getBean(userDaoService.class);
service.call();
导入坐标
//springmvc配置类,本质上还是一个spring配置类
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}
//定义表现层控制器bean
@Controller
//设置操作返回结果为指定json数据(本质上是一个字符串信息)
@ResponseBody
public class userController {
@RequestMapping("/user/save")
public String save() {
System.out.println("save id running");
return "springmvc";
}
}
//web容器配置类
public class ServletConfig extends AbstractDispatcherServletInitializer {
//加载springmvc配置类,产生springmvc容器(本质还是spring容器)
protected WebApplicationContext createServletApplicationContext() {
//初始化WebApplicationContext对象
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
//加载指定配置类
ctx.register(SpringMvcConfig.class);
return ctx;
}
//设置由springmvc控制器处理的请求映射路径
protected String[] getServletMappings() {
return new String[]{"/"};
}
//加载spring配置类
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
方式一 (springConfig)
@Configuration
@ComponentScan(value = "com.itheima",
excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Controller.class
)
)
public class SpringConfig {
}
方式二(设置精确加载)
@ComponentScan({xxx,xxx})
public class ServletConfig extends AbstractDispatcherServletInitializer {
//加载springMvcConfig
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
//加载springConfig
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx;
}
//配置拦截与访问路径
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
//加载springMvcConfig
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class}
};
//配置拦截与访问路径
protected String[] getServletMappings() {
return new String[]{"/"};
}
//加载springConfig
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
}
//http://xxx/user/call?aa=bb
@RequestMapping("/call")
public String call(String aa) {
System.out.println(aa);
return aa;
}
在pom.xml添加tomcat7插件处配置UTF-8字符集,解决GET请求中文乱码问题。
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port><!--tomcat端口号-->
<path>/</path> <!--虚拟目录-->
<uriEncoding>UTF-8</uriEncoding><!--访问路径编解码字符集-->
</configuration>
</plugin>
</plugins>
</build>
请求参数与形参名相同即可
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
System.out.println("普通参数传递 name ==> "+name);
System.out.println("普通参数传递 age ==> "+age);
return "post";
}
不相同时可用@RequestParam(“aa”)
public String commonParam(@RequestParam("aa") String name ,int age)
在运行加载SpringMVC配置的配置类中指定字符过滤器。
//乱码处理
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
请求参数与形参对象中的属性对应即可完成参数传递
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
System.out.println("pojo参数传递 user ==> "+user);
return "pojo param";
}
public class User {
private String name;
private int age;
private Address address;
//同学们自己添加getter/setter/toString()方法
}
public class Address {
private String province;
private String city;
private Address address;
}
嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
//数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
return "array param'";
}
//集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes){
System.out.println("集合参数传递 likes ==> "+ likes);
return "{'module':'list param'}";
}
添加坐标
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
开启自动转换json数据的支持
@Configuration
@ComponentScan("com.itheima.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}
//集合参数:json格式(数组)
//1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
//2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
System.out.println("list common(json)参数传递 list ==> "+likes);
return "{'module':'list common for json param'}";
}
//POJO参数:json格式(对象)
//1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
//2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
@RequestMapping("/pojoParamForJson")
@ResponseBody
public String pojoParamForJson(@RequestBody User user){
System.out.println("pojo(json)参数传递 user ==> "+user);
return "{'module':'pojo for json param'}";
}
名称:@RequestBody
类型:==形参注解==
位置:SpringMVC控制器方法形参定义前面
作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
@RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
@RequestBody用于接收json数据【application/json】
//日期参数 http://localhost:80/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08
//使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,
@DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
System.out.println("参数传递 date ==> "+date);
System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
return "data param";
}
public String
return "index.jsp";
//需要在SpringMvcConfig配置类中 @EnableWebMvc注解
//pojo对象
new pojo();
setxxx();
//pojo对象会自动转成JSON对象
return pojo;
//集合pojo对象
list.add(pojo1);
list.add(pojo2);
//pojo集合会自动转为JSON集合
return list;
REST风格描述形式
http://localhost/users/1
http://localhost/users
以加s形式描述
优点:
根据rest风格对资源进行访问称为restful
//设置当前请求方法为POST,表示REST风格中的添加操作
@RequestMapping(value = "/users",method = RequestMethod.POST)
@ResponseBody
public String save(){
System.out.println("user save...");
return "{'module':'user save'}";
}
//设置当前请求方法为DELETE,表示REST风格中的删除操作
//@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同
@RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
@ResponseBody
public String delete(@PathVariable Integer id){
System.out.println("user delete..." + id);
return "{'module':'user delete'}";
}
//设置当前请求方法为PUT,表示REST风格中的修改操作
//设置当前请求方法为GET,表示REST风格中的查询操作
@RequestParam用于接收url地址传参或表单传参
@RequestBody用于接收json数据
@PathVariable用于接收路径参数,使用{参数名称}描述路径参数
@PathVariable 形参与参数名要对应,不对应则写@PathVariable("aa")
@RequestMapping(value="/{xxx}",method=RequestMethod.POST)
-> @POSTMapping("/{xxx}")
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
//设置静态资源访问过滤,当前类需要设置为配置类,并被扫描加载
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//当访问/pages/????时候,从/pages目录下查找内
registry.addResourceHandler("/**").addResourceLocations("/");
registry.addResourceHandler("/pages/**")
.addResourceLocations("/pages/");
registry.addResourceHandler("/js/**")
.addResourceLocations("/js/");
registry.addResourceHandler("/css/**")
.addResourceLocations("/css/");
registry.addResourceHandler("/font/**")
.addResourceLocations("/font/");
}
}
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/hardware_sys?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=sql666
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
//数据库连接池
@Bean
public DataSource dateSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
//Spring事务管理需要平台事务管理器对象
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
DataSourceTransactionManager ds = new DataSourceTransactionManager();
ds.setDataSource(dataSource);
return ds;
}
}
public class MyBatisConfig {
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setTypeAliasesPackage("com.colorful.domain");
//开启驼峰命名转换
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);
factoryBean.setConfiguration(configuration);
return factoryBean;
}
//映射文件扫描
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.colorful.dao");
return msc;
}
}
@Import({JdbcConfig.class, MyBatisConfig.class})
public interface UserDao {
@Select("select * from user_data where name = #{name} and password = #{password}")
public User userVerify(@Param("name") String name, @Param("password") String password);
}
@Getter
@Setter
@ToString
public class User {
private int id;
private String name;
private String password;
private boolean status;
private boolean mana;
}
@Autowired
private HardwareDao hardwareDao;
@Getter
@Setter
@ToString
public class Result {
private Integer code;
private Object data;
private String message;
public Result(Integer code, Object data) {
this.code = code;
this.data = data;
}
public Result(Integer code, Object data, String message) {
this.code = code;
this.data = data;
this.message = message;
}
}
public class Code {
public static final Integer POST_OK = 10011;
public static final Integer DEL_OK = 10021;
public static final Integer PUT_OK = 10031;
public static final Integer GET_OK = 10041;
public static final Integer POST_ERR = 10010;
public static final Integer DEL_ERR = 10020;
public static final Integer PUT_ERR = 10030;
public static final Integer GET_ERR = 10040;
}
@PostMapping
public Result addHardrware(@RequestBody Hardware hardware) {
boolean flag = service.addHardware(hardware.getName(), hardware.getHardwareId(), hardware.getHardwarePort());
return new Result(flag ? Code.POST_OK: Code.POST_ERR,flag,"添加");
}