首先SSM是指Spring SpringMVC Mybatis
我们都知道再写Java时需要分层
一般大致是分:DAO层,pojo层,service层,servlet层(剩余的项目情况)
但是servlet在SSM整合时我们一般称作为controller层,用来控制数据和视图
所以应该分为:dao层,pojo层,service层,controller层
dao层
明确dao层的作用:完成对数据库库的CRUD,并且需要mybatis的帮助,导包::
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
既然我们对数据库需要进行增删改查,因此我们需要完成对应实体类的编写
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User{
String name;
int age;
}
dao层的接口:
public interface UserMapper{
List<User> queryAllUser();
}
那么我们如何连接数据库呢?
在mybatis和spring整合之后
mybaits的核心配置需要配置在spring文件中,并且因为spring.xml文件可以通过import的方式整合
新建一个db.properties文件存储JDBC的数据
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/表名?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
新建一个spring-dao.xml文件配置
<!--1 关联数据库配置文件-->
<context:property-placeholder location="classpath:db.properties"/>
//数据库连接池
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!--c3p0的私有属性-->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!--关闭连接后,不自动commit-->
<property name="autoCommitOnClose" value="false"/>
<property name="checkoutTimeout" value="10000"/>
<property name="acquireRetryAttempts" value="2"/>
</bean>
<!--3 sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--绑定数据库-->
<property name="dataSource" ref="dataSource"/>
<!--绑定Mybatis的配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--4 配置dao接口扫描包,动态的实现了dao接口可以注入到Spring容器中,不用写mapperImpl.xml-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入sqlSessionFactory-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--扫描要扫描的dao的包-->
<property name="basePackage" value="com.zhy.dao"/>
</bean>
其中mybatis的setting配置是分开的(其实也可以整合在spring在不复杂的情况下)
再新建一个mybatis-config.xml
<?xml version="1.0" encoding="UTF8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置文件-->
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--配置数据源,交给Spring去做-->
<!--取别名-->
<typeAliases>
<!--resultMap:默认类名小写为使用id-->
<package name="com.zhy.pojo"/>
</typeAliases>
</configuration>
在动态的扫描Mapper时我们需要有Mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zhy.dao.UserMapper"></mapper>
具体内容大家按照自己的需求写SQL
动态扫描: 1.根据Mapper接口自动完成实现类MapperImpl.class 2.通过注入sqlsessionfactory->MapperImpl.class 有两种方式得到sqlsession: 1.继承SqlSessionDaoSupport 2.通过set方法设置SqlSessionTemplate 3.通过xml文件执行得到内容
servce层
先写service接口
service实现类serviceImpl.class
新建spring-service.xml文件
内容:
1.扫描包
<context:component-scan base-package="com.zhy.service"/>
2.service层dao层的mapper
<bean id="BookServiceImpl" class="com.zhy.service.BookServiceImpl"> <property name="mapper" ref="bookMapper"/> </bean>
mvc层
@Controller
@RequestMapping("/ssm")
public class UserList {
@Autowired
@Qualifier("BookServiceImpl")
private BookService bookService;
@RequestMapping("/alluser")
public String getusers(Model model) {
List<Books> list = bookService.queryAllUser();
model.addAttribute("list", list);
return "userlist";
}
}
spring-mvc.xml
<!-- 包扫描--> <context:component-scan base-package="com.zhy.controller"/> <!-- 静态资源导入--> <mvc:default-servlet-handler/> <!-- 注解使用声明--> <mvc:annotation-driven/> <!--视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>
最后全部import到application.xml中