一般化:
使用SSM框架查询数据时必须注意的事务相关事项
Oracle数据库代码
eclipse中的项目代码
访问路径运行效果
SSM框架必备的要导入项目的包
PS:淦!之前用SSM框架查询数据库的内容,我尝试很多遍,看控制台打印的日志等等都没报错,代码也没错等等,纳闷了很久,结果写这篇专栏的今天才发现原来是我新建表的时候,使用insert语句插入数据时忘记提交事务了!淦!(╬▔皿▔)凸
个人学术想法:其实如何判断你会运用你记录的例子呢?就是看你知道如何根据需求知道哪里要改,知道怎么改。其实平时记录要会运用的例子,要记录如何根据需求知道哪里要改,知道怎么改等的内容就可以解决记忆等的问题,记录可以解决记忆,部分思考或理解等方面的问题。比如记录优秀up主等的视频例子和记录如何根据需求知道哪里要改,知道怎么改等的内容。比如记录自己等人写的项目例子和记录项目的个人使用和哪里要注意更改和别忘了等等的注释等等。
以上就是我很宝贵的方法!换做别人可能不愿意分享这种宝贵的方法,但因为我还有现存或将产出的这种宝贵的方法,所以我暂时愿意分享这类宝贵的方法!求三连关注啊!“魂淡”们!(╬▔皿▔)凸(最近在复习《银魂》来回想我以前看《银魂》的美好时光!)
在使用SSM框架查询数据的时候必须要注意的事务相关的事项 START
Oracle数据库的表的数据插入时必须要按绿色的提交事务按钮,不然只是暂时的数据插入,以后重启Oracle数据库后,这些没有插入数据的内容就会不见。
在使用SSM框架查询数据的时候必须要注意的事务相关的事项
END
用SSM框架实现查询功能 START
SSM框架必备的要导入项目的包:
Oracle数据库代码(使用insert语句插入数据后记得提交事务啊!淦!(╬▔皿▔)凸):
Product简易版:
–drop table Product
create table Product(
id number primary key,
name varchar2(30) not null,
price number(10,2)
);
–drop sequence seq_Product
create sequence seq_Product
start with 1 –起始值是1
increment by 1 –增长的值
maxvalue 999999999 –序列号的最大值
minvalue 1 –序列号的最小值
nocycle –是否循环
cache 10; –预存
insert into Product values(seq_Product.nextval,’黑笔’,1.5);
insert into Product values(seq_Product.nextval,’红书’,2.0);
insert into Product values(seq_Product.nextval,’挂面’,3.0);
insert into Product values(seq_Product.nextval,’蓝笔’,1.5);
insert into Product values(seq_Product.nextval,’黄书’,2.0);
insert into Product values(seq_Product.nextval,’拉面’,3.0);
–select * from Product
eclipse中的项目代码:
package com.SSHC.bean;
public class Product {
private Integer id;
private String name;
private Double price;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
package com.SSHC.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.SSHC.service.PubService;
@Controller
public class ProductController {
@Resource
private PubService pubService;
@RequestMapping(“test”)
public String hello(){
pubService.testSv();
return “test”;
}
}
package com.SSHC.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.SSHC.bean.Product;
@Repository
public interface ProductDao {
List<Product> selectAll();
}
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!DOCTYPE mapper
PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”
<!– namespace不能乱写,必须写成ProductDao接口的全路径 –>
<mapper namespace=”com.SSHC.dao.ProductDao”>
<resultMap type=”Product” id=”rmProduct”>
<id property=”id” column=”id”/>
<result property=”name” column=”name”/>
<result property=”price” column=”price”/>
</resultMap>
<select id=”selectAll” resultMap=”rmProduct”>
select * from Product
</select>
</mapper>
package com.SSHC.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.SSHC.bean.Product;
import com.SSHC.dao.ProductDao;
@Service
public class PubService {
//属性名就是接口名的首字母改成小写
@Resource
private ProductDao productDao;
public void testSv(){
List<Product>list = productDao.selectAll();
for(Product u : list) {
System.out.println(“编号:”+u.getId()
+” 商品名称:”+u.getName()
+” 商品价格”+u.getPrice());
}
}
}
oracle_drivername=oracle.jdbc.driver.OracleDriver
oracle_url=jdbc:oracle:thin:@localhost:1521:orcl
oracle_username=X
oracle_password=sshcPwd
log4j.rootLogger=DEBUG,Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d[%t] %-5p [%c] – %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!DOCTYPE configuration PUBLIC
“-//mybatis.org//DTD Config 3.0//EN”
<configuration>
<typeAliases>
<!– Aliases:别名[ˈeɪlɪæsɪz]
configuration
英[kənˌfɪɡəˈreɪʃn]
美[kənˌfɪɡjəˈreɪʃn]
n. 布局; 结构; 【构造】;
格局; 形状; (计算机的)配置
注:【】中的内容是我认为有目前我要知道的重要意思之一。–>
<package name=”com.SSHC.bean”/>
</typeAliases>
</configuration>
<?xml version=”1.0″ encoding=”UTF-8″?>
<!– 引入db.properties文件 –>
<bean id=”propertyConfigurer”
class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”>
<property name=”location” value=”classpath:db.properties”/>
</bean>
<!–数据库连接池配置–>
<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource”
destroy-method=”close”>
<property name=”driverClassName” value=”${oracle_drivername}”/>
<property name=”url” value=”${oracle_url}”/>
<property name=”username” value=”${oracle_username}”/>
<property name=”password” value=”${oracle_password}”/>
</bean>
<!– 创建sqlSessionFactory对象 –>
<bean id=”sqlSessionFactory” class=”org.mybatis.spring.SqlSessionFactoryBean”>
<!– 指定数据源 –>
<property name=”dataSource” ref=”dataSource”/>
<!– 指定mybatis框架主配置文件的位置 –>
<property name=”configLocation” value=”classpath:mybatis.xml”/>
<!– 自动扫描mapping.xml文件,**表示迭代查找 ,,也可在mybatis.xml中单独指定xml文件 –>
<property name=”mapperLocations” value=”classpath:com/SSHC/dao/*.xml”/>
</bean>
<!– 自动扫描com/SSHC/dao下的所有dao接口,并实现这些接口,
可直接在程序中使用dao接口,不用再获取sqlsession对象 –>
<bean class=”org.mybatis.spring.mapper.MapperScannerConfigurer”>
<!– basePackage 属性是映射器接口文件的包路径。
你可以使用分号或逗号 作为分隔符设置多于一个的包路径–>
<property name=”basePackage” value=”com/SSHC/dao”/>
<!– 因为会自动装配 SqlSessionFactory和SqlSessionTemplate
所以没有必要去指定SqlSessionFactory或 SqlSessionTemplate
因此可省略不配置;
但是,如果你使用了一个以上的 DataSource,那么自动装配可能会失效。
这种情况下,你可以使用sqlSessionFactoryBeanName或sqlSessionTemplateBeanName属性
来设置正确的 bean名称来使用 –>
<property name=”sqlSessionFactoryBeanName” value=”sqlSessionFactory”/>
</bean>
</beans>
<?xml version=”1.0″ encoding=”UTF-8″?>
<!– 扫描@Controller注解 –>
<context:component-scan base-package=”com.SSHC.dao,com.SSHC.service,com.SSHC.controller”/>
<!– 默认注册RequestMappingHandlerMapping和RequestMappingHandlerAdapter类 –>
<mvc:annotation-driven />
<!– jsp引用外部js,css等静态资源的解决方法(和上面的标签必须同时出现,否则无法访问url) –>
<mvc:default-servlet-handler />
<!– 配置视图名称解析器 –>
<bean class=”org.springframework.web.servlet.view.InternalResourceViewResolver”
id=”internalResourceViewResolver”>
<!– 前缀 –>
<!– 将所有的jsp文件存放在/WEB-INF/my/目录下 –>
<property name=”prefix” value=”/WEB-INF/” />
<!– 后缀 –>
<property name=”suffix” value=”.jsp” />
<!– 优先级设定 –>
<property name=”order” value=”10″></property>
</bean>
</beans>
<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<base hreff=”<%=basePath%>”>
<title></title>
</head>
<body>
<h1>测试成功</h1>
</body>
</html>
<?xml version=”1.0″ encoding=”UTF-8″?>
<display-name>SSMhomework1</display-name>
<!– springcore框架配置 –>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!– controller中文乱码处理,注意一点:要配置在所有过滤器的前面 –>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!– springmvc框架配置 –>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
访问路径运行效果:
运用这个项目时大部分情况要改的部分:
用SSM框架实现查询功能 END