掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
SpringMVC是一種基于Spring框架的MVC(Model-View-Controller)架構模式的Web應用程序開發(fā)框架,它提供了一種輕量級且靈活的方式來構建Web應用程序。SpringMVC框架旨在將應用程序的業(yè)務邏輯與Web應用程序的UI表示分離開來,這樣使得應用程序能夠更加容易地進行維護和擴展。在Web應用程序開發(fā)過程中,與數(shù)據(jù)庫進行交互是不可避免的一個環(huán)節(jié),因此本篇文章將重點介紹如何使用SpringMVC框架連接數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)交互。

我們提供的服務有:成都網(wǎng)站設計、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、廣東ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的廣東網(wǎng)站制作公司
一、配置數(shù)據(jù)源
在使用SpringMVC框架連接數(shù)據(jù)庫之前,首先需要在Spring配置文件中配置數(shù)據(jù)源。Spring提供了多種不同的數(shù)據(jù)源實現(xiàn),包括基于JDBC的數(shù)據(jù)源、基于JNDI的數(shù)據(jù)源等等。其中,基于JDBC的數(shù)據(jù)源是最常用的一種方式。下面是一個基于JDBC的數(shù)據(jù)源配置示例:
“`xml
“`
以上配置代碼中,我們使用DriverManagerDataSource來實例化數(shù)據(jù)源,指定了MySQL的JDBC驅動程序、數(shù)據(jù)庫連接地址、數(shù)據(jù)庫登錄用戶名和密碼。通過配置數(shù)據(jù)源,我們可以在應用程序中直接使用Spring的JDBC模板來進行數(shù)據(jù)庫操作。
二、編寫數(shù)據(jù)訪問代碼
在使用SpringMVC框架連接數(shù)據(jù)庫時,常常需要編寫數(shù)據(jù)訪問代碼來實現(xiàn)對數(shù)據(jù)庫的CRUD(Create, Read, Update, Delete)操作。Spring提供了多種不同的方式來實現(xiàn)數(shù)據(jù)訪問,包括JDBC模板、ORM框架、MyBatis等等。下面我們以JDBC模板為例,示范如何實現(xiàn)數(shù)據(jù)訪問操作。
1. 創(chuàng)建DAO接口
“`java
public interface UserDao {
public User getUserById(int userId);
public List getAllUsers();
public void addUser(User user);
public void updateUser(User user);
public void deleteUser(User user);
}
“`
在這個接口中,我們定義了5個方法,分別是根據(jù)用戶id獲取用戶信息、獲取所有用戶信息、添加用戶、更新用戶信息和刪除用戶。
2. 創(chuàng)建DAO實現(xiàn)類
“`java
public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
// 獲取指定id的用戶信息
public User getUserById(int userId) {
String sql = “SELECT * FROM users WHERE id = ?”;
return getJdbcTemplate().queryForObject(sql, new Object[]{userId}, new UserMapper());
}
// 獲取所有用戶信息
public List getAllUsers() {
String sql = “SELECT * FROM users”;
return getJdbcTemplate().query(sql, new UserMapper());
}
// 添加用戶
public void addUser(User user) {
String sql = “INSERT INTO users(username, password, eml) VALUES (?, ?, ?)”;
getJdbcTemplate().update(sql, user.getUsername(), user.getPassword(), user.getEml());
}
// 更新用戶信息
public void updateUser(User user) {
String sql = “UPDATE users SET username = ?, password = ?, eml = ? WHERE id = ?”;
getJdbcTemplate().update(sql, user.getUsername(), user.getPassword(), user.getEml(), user.getId());
}
// 刪除用戶
public void deleteUser(User user) {
String sql = “DELETE FROM users WHERE id = ?”;
getJdbcTemplate().update(sql, user.getId());
}
}
“`
以上代碼中,我們繼承了Spring提供的JdbcDaoSupport類,它提供了一些通用的JDBC操作,例如獲取JdbcTemplate、釋放資源等等。在getUserById方法中,我們使用queryForObject方法返回一個User對象,其中第三個參數(shù)UserMapper是繼承了Spring提供的RowMapper接口實現(xiàn)的一個類,用于將查詢結果映射到一個Java對象。在addUser方法中,我們使用update方法進行了一次插入操作。對于更新和刪除操作,update方法的使用方式與插入操作類似。
3. 創(chuàng)建RowMapper類
在上述代碼中,我們需要自定義一個UserMapper類,實現(xiàn)RowMapper接口用于將查詢結果映射到一個Java對象上面。示例代碼如下:
“`java
public class UserMapper implements RowMapper {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt(“id”));
user.setUsername(rs.getString(“username”));
user.setPassword(rs.getString(“password”));
user.setEml(rs.getString(“eml”));
return user;
}
}
“`
以上代碼中,我們重寫了RowMapper接口的mapRow方法,將ResultSet中的數(shù)據(jù)轉換為User對象。
三、添加控制器代碼
以上代碼只是實現(xiàn)了對數(shù)據(jù)庫的數(shù)據(jù)訪問操作,而要將這些數(shù)據(jù)顯示在Web頁面上,我們還需要編寫控制器代碼。我們可以在控制器中調(diào)用DAO層的方法,將查詢結果設置到ModelAndView中,然后返回到前臺頁面進行顯示。
下面是一個簡單的示例控制器代碼:
“`java
@Controller
public class UserController {
@Autowired
private UserDao userDao;
@RequestMapping(value=”/user/{userId}”, method=RequestMethod.GET)
public ModelAndView getUser(@PathVariable(“userId”) int userId) {
User user = userDao.getUserById(userId);
ModelAndView model = new ModelAndView(“user/view”);
model.addObject(“user”, user);
return model;
}
@RequestMapping(value=”/user/add”, method=RequestMethod.POST)
public ModelAndView addUser(@ModelAttribute(“user”)User user) {
userDao.addUser(user);
return new ModelAndView(“redirect:/user/”);
}
@RequestMapping(value=”/user/update”, method=RequestMethod.POST)
public ModelAndView updateUser(@ModelAttribute(“user”)User user) {
userDao.updateUser(user);
return new ModelAndView(“redirect:/user/”);
}
@RequestMapping(value=”/user/delete”, method=RequestMethod.POST)
public ModelAndView deleteUser(@ModelAttribute(“user”)User user) {
userDao.deleteUser(user);
return new ModelAndView(“redirect:/user/”);
}
@RequestMapping(value=”/user/”, method=RequestMethod.GET)
public ModelAndView getAllUsers() {
List userList = userDao.getAllUsers();
ModelAndView model = new ModelAndView(“user/list”);
model.addObject(“userList”, userList);
return model;
}
}
“`
在上述代碼中,我們定義了4個RequestMapping請求,參數(shù)分別是用戶id、User對象、以及空參數(shù)。在getUser方法中,我們使用@PathVariable注解將url中的參數(shù)綁定到userId參數(shù)上。在addUser、updateUser和deleteUser三個方法中,我們使用@ModelAttribute注解將表單中的參數(shù)綁定到User對象上。在getAllUsers方法中,我們調(diào)用了UserDao中的getAllUsers方法,將查詢結果設置到ModelAndView中,然后返回到前臺頁面進行顯示。
四、編寫前端頁面
最后一步是編寫前端頁面,以顯示數(shù)據(jù)庫中的數(shù)據(jù)。SpringMVC框架支持多種不同的視圖解析器,包括P、Thymeleaf、Velocity等等。我們可以根據(jù)自己的喜好選擇一個合適的視圖解析器來實現(xiàn)前端頁面的開發(fā)。這里我們以P為例,給出一個用戶列表頁面示例代碼:
“`html
User List
| ID | Username | Password | Eml |
|---|---|---|---|
| ${user.id} | ${user.username} | ${user.password} | ${user.eml} |
Username:
Password:
Eml:
Username:
Password:
Eml:
Username: ${user.username}
Password: ${user.password}
Eml: ${user.eml}
“`
以上代碼中,我們以表格的形式顯示了所有用戶信息,并且在頁面上提供了添加用戶、編輯用戶和刪除用戶的功能。
相關問題拓展閱讀:
springmvc只是視圖層控制容器不能直接操作數(shù)據(jù)庫,要通過持久層hibernate或者灶芹晌mybatis等框架對隱鋒數(shù)據(jù)庫操作。可以不用首肢實體,使用jdbc直接查詢數(shù)據(jù)庫也行,查出來轉換成json字符串
是要有實體類的。什么是MVC,什么是MVC思想?沒有實體類,M怎么來。
java spring-mvc,sql多枯游表查詢,將查詢結果放入一個臨時定義的class中,怎么執(zhí)行語句
,這是實體類,用hibernate,他和數(shù)據(jù)庫里面的表的列應該是對應明鬧的,你查出來的字段需要在實體類里面對應,你自己看看沒槐銷,a.target as target 他對應的屬性都沒有 ,maping絕對報錯
1.創(chuàng)建日志數(shù)據(jù)表:
view plainprint?CREATE02TABLE02log02(0202IDENTITY02(1,021)02primary02key02NOT02NULL02,0202NOT02NULL02,0202(50)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,0202(20)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,0202(200)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,0202(2023)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL0202)0202GO02023.寫log4j.properties文件,這里我的數(shù)據(jù)庫舉動是用的JTDS:
引用# level : 是日志記錄的優(yōu)先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。
# Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG。
log4j.rootLogger=ERROR,DATABASE
log4j.addivity.org.apache=true
# 用于數(shù)據(jù)庫
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:jtds:
log4j.appender.DATABASE.driver=net.sourceforge.jtds.jdbc.Driver
log4j.appender.DATABASE.user=username
log4j.appender.DATABASE.password=password
# 本處設置為”WARN”以上級別在數(shù)據(jù)庫存儲(默認情況使用rootLogger中的設置)
log4j.appender.DATABASE.Threshold=DEBUG
log4j.appender.DATABASE.sql=INSERT INTO log(optime,thread,infolevel,class,message) VALUES (‘%d{yyyy-MM-dd HH:mm:ss}’, ‘%t’, ‘%p’, ‘%l’, ‘%m’)
# 寫入數(shù)據(jù)庫中的表LOG4J的Message字段中,
# 內(nèi)容%d(日期)%c: 日志信息所在地(類名)%p: 日志信息級別%m: 產(chǎn)生的日志具體信息 %n: 輸出日志信息換行
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern= %d – %c -%-4r %-5p %c %x – %m%n3.在程序中需要將日志信息寫入數(shù)據(jù)庫的地方寫入如下代碼:
view plainprint?
法規(guī)和法國恢復規(guī)劃法規(guī)和
創(chuàng)新互聯(lián)服務器托管擁有成都T3+級標準機房資源,具備完善的安防設施、三線及BGP網(wǎng)絡接入帶寬達10T,機柜接入千兆交換機,能夠有效保證服務器托管業(yè)務安全、可靠、穩(wěn)定、高效運行;創(chuàng)新互聯(lián)專注于成都服務器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認可。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流