志愿者协会网站建设还有哪些平台能免费营销产品
一,使用JdbcTemplate访问MySQL数据库
1,确认本地已正确安装mysql
- 按【win+r】快捷键打开运行;
- 输入services.msc,点击【确定】;
- 在打开的服务列表中查找mysql服务,如果没有mysql服务,说明本机没有安装mysql,按如下方式进行安装:
(1)点击mysql安装包下载链接:https://dev.mysql.com/downloads/mysql/,点击直接下载即可;
(2)解压后,在bin目录同级下创建一个文件,命名为my.ini
内容如下:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录 ---这里输入你安装的文件路径----
basedir=D:\mysql\mysql_install
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
(3) 打开cmd进入mysql的bin文件下(D:\mysql\mysql-8.0.16-winx64),执行命令:
mysqld --initialize --console
注意:安装mysql 安装完成后Mysql会有一个随机初始密码,一定要保存!
如果exe安装时有设置密码,那就用那个密码。
(4)接下来执行以下命令:
// 执行mysql安装
mysqld --install mysql// 使用命令提示符启动MySQL服务
net start mysql//进入mysql,回车后输入上面安装时保存的初始密码
mysql -uroot -p//修改密码为1234
ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';// 查看MySQL服务状态
status//quit退出mysql后用以下命令也可以查询:
mysql -u root -p -e"status;"
(5)配置环境变量:
2,配置IDEA访问MySQL数据库:
1,打开cmd,进入mysql的bin目录,执行以下命令创建数据库:
//进入mysql的bin目录
D:
cd mysql\mysql-8.0.16-winx64\bin//登录mysql,注意-p后面无空格
mysql -uroot -p1234// 创建 mydatabasecreate database mydatabase;// 查看databasesshow databases;// 切换到mydatabaseuse mydatabase;// 创建table `t_user`, 有id、username和password三项CREATE TABLE `t_user` (`id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',`username` varchar(100) DEFAULT NULL,`password` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';//查看tablesshow tables;// 插入一项INSERT INTO t_user VALUES(1,"admin","123456");//查看表内容SELECT * FROM t_user;
2,idea中在pom.xml中加入依赖:
<!-- 添加mysql依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version><scope>runtime</scope><!-- MySQL5.x时,请使用5.x的连接器(cmd执行mysql -V确定)<groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.45</version>--></dependency><!-- 添加jdbc依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- 添加junit依赖 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency>
3,在src/main/resources/application.properties中配置数据源信息
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
//mysql5: spring.datasource.driver-class-name=com.mysql.jdbc.Driver
配置idea连接查看数据库:
(1)View-> Tool Windows -> Database进入:
如果社区版没有Database,搜索 file-settings-plugins,安装Database Navigator也是一样的。通过View-> Tool Windows -> DB Browser进入
(2)在Database视图中点击“+”号创建Mysql:
(3)选择要连接的数据库,Test Connection测试:
(4)打开可以看到对应的表项:
3,使用JdbcTemplate修改MySQL数据库:
新建实体类 如下:
User类:
package com.example.demospringboot;import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
public class User {private int id;private String username;private String password;
}
UserService类:
package com.example.demospringboot;import java.util.List;public interface UserService {/*** 新增一个用户** @param id* @param username* @param password*/public void addUser(int id, String username, String password);/*** 删除一个用户* @param id*/public void delUser(int id);/*** 根据id查询用户** @param id* @return*/List<User> getUserById(int id);/*** 查询全部用户* @return*/public List<User> getUserAll();/*** 删除所有用户*/public int delUserAll();
}
UserServiceImpl类
JDBCTemplate 提供3个操作数据的方法:
execute 直接执行 sql 语句
update 进行新增、修改、删除操作
query 查询操作
package com.example.demospringboot;import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl implements UserService {private JdbcTemplate jdbcTemplate;public UserServiceImpl(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Overridepublic void addUser(int id, String username, String password) {String sql = "INSERT INTO t_user VALUES(?,?,?)";jdbcTemplate.update(sql, id, username, password);System.out.println(id + " " + username + " " + password);}@Overridepublic void delUser(int id) {String sql = "delete from t_user where id=?";jdbcTemplate.update(sql, id);}@Overridepublic List<User> getUserById(int id) {String sql = "select ID, USERNAME, PASSWORD from t_user where id = ?";List<User> users = jdbcTemplate.query(sql, (resultSet, i) -> {User user = new User();user.setId(resultSet.getInt("ID"));user.setUsername(resultSet.getString("USERNAME"));user.setPassword(resultSet.getString("PASSWORD"));return user;}, id);return users;}@Overridepublic List<User> getUserAll() {String sql = "select * from t_user";return jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));}@Overridepublic int delUserAll() {return jdbcTemplate.update("delete from t_user");}
}
test用例:
package com.example.demospringboot;import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.List;@RunWith(SpringRunner.class)
@SpringBootTest
public class DemospringbootApplicationTests {@Autowiredprivate UserService userService;@Beforepublic void setUp() {// 准备,清空user表userService.delUserAll();}@Testpublic void test() throws Exception {// 插入5个用户userService.addUser(1, "Tom", "1000");userService.addUser(2, "Mike", "1111");userService.addUser(3, "Didispace", "3000");userService.addUser(4, "Oscar", "2111");userService.addUser(5, "Linda", "1711");// 查询id为4的用户,判断名字是否为OscarList<User> userList = userService.getUserById(4);Assert.assertEquals("Oscar", userList.get(0).getUsername());// 查数据库,应该有5个用户Assert.assertEquals(5, userService.getUserAll().size());// 删除两个用户userService.delUser(2);userService.delUser(3);// 查数据库,应该有3个用户Assert.assertEquals(3, userService.getUserAll().size());}
}
执行用例成功,查看数据库符合预期:
添加控制器 UserController :
package com.example.demospringboot;import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/user")
@Log4j2
public class UserController {private JdbcTemplate jdbcTemplate;@Autowiredpublic void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}// 返回所有用户@GetMapping("/get")public List<User> getUserAll() {String sql = "SELECT id,username,password FROM t_user";return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));}/*** 添加用户*/@GetMapping("/add")public void addUser() {String sql = "INSERT INTO t_user VALUES(?,?,?)";int row = jdbcTemplate.update(sql,10, "Jacky", "123456");log.info("保存用户成功!保存个数: " + row);}
}
打开页面:
http://localhost:8080/user/add
http://localhost:8080/user/get
回显如下:
[{"id":1,"username":"Tom","password":"1000"},{"id":4,"username":"Oscar","password":"2111"},{"id":5,"username":"Linda","password":"1711"},{"id":10,"username":"Jacky","password":"123456"}]
总结
关于Spring所提供的JdbcTemplate的用法就是这些,Spring集成JdbcTemplate的方法也是比较简单的,整体就是先引入依赖,在配置数据库的连接,然后使用jdbcTemplate这个类就可以了,JdbcTemplate 类中就已经封装了大部分对于数据库的操作。
简单是简单,但是这个框架在企业级项目中应用是比较少的,一般用于对于操作数据库的要求不高的项目,因为他就是对jdbc的简单封装,所有的sql都是写入到代码中,维护性差,看起来也比较乱。后边我们会继续介绍比较主流的DAO层框架Mybatis和JPA的用法。希望本篇文章对大家有所帮助。
问题记录
1,编译运行报错如下:
Description: Parameter 0 of constructor in com.example.DemoSpringBoot.UserServiceImpl required a bean of type 'org.springframework.jdbc.core.JdbcTemplate' that could not be found
解决方案:
(1)推荐依赖spring-boot-starter-jdbc, 而不是spring-jdbc
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>
(2)引入Druid依赖,阿里巴巴所提供的数据源
<!-- 引入Druid依赖,阿里巴巴所提供的数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.13</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>
appliction.properties:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
2,当进行需要连接数据库的操作时,控制台会报下面这种红色警报:
Sat Jul 09 14:57:03 CST 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
解决方法 1 :在配置文件中的连接数据库的URL后面添加 useSSL=false
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false
方案二:可能是连接数据库的驱动版本问题(5.1.46),更换成其他版本即可。
<groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version>
</dependency>
调整为
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.0.8</version>
</dependency>
3,报错:Web server failed to start. Port 8080 was already in use.
cmd命令如下:
参考:https://blog.didispace.com/spring-boot-learning-21-3-1/
使用MyBatis访问MySQL
参考:https://blog.didispace.com/spring-boot-learning-21-3-5/
使用Spring Data JPA访问MySQL
在之前,我们使用JDBC或是Mybatis来操作数据,通过直接编写对应的SQL语句来实现数据访问,然而当我们有一定的开发经验之后,不难发现,在实际开发过程中,对数据库的操作大多可以归结为:“增删改查”。为了解决这些大量枯燥的数据操作语句,诞生了非常多的优秀框架,比如:JPA规范的框架一般最常用的Hibernate。
JPA(Java Persistence API)和JDBC类似,也是官方定义的一组接口,但是它相比传统的JDBC,它是为了实现ORM而生的,即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间形成一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
而实现JPA规范的框架一般最常用的就是Hibernate,它是一个重量级框架,学习难度相比Mybatis也更高一些,而SpringDataJPA也是采用Hibernate框架作为底层实现,并对其加以封装。
参考:https://blog.didispace.com/spring-boot-learning-21-3-4/