作为一名菜鸟 ,失败了n次终于成功搭建,在这里记录一下,以便自己和有需要的人参考
第一步:用maven创建项目呗 然后next
然后填上id,两个id可以相同 也可以不同 然后next
选择你的maven本地仓库目录,如果是第一次建立maven 速度会很慢,推荐使用阿里镜像,百度即可
然后就是填上你得项目名称,还有项目存放位置,点击finish
然后要等一段时间即可
建立项目后记得选择这里哦,这样你后面配置在pom里面的 maven就可以自动下载为你所用了
第二步:建立目录结构呗,如下
建目录之后建立Java源文件的时候会发现,咦?怎么不能新建Java文件呢?如下
不要慌张啦,这是因为新建的是文件夹,要配置一下啦,如下
或者呢,直接快捷键:Ctrl+Shift+Alt+s
后面建立测试目录也是这样改哦,就是绿色的那个啦,修改完成之后记得要Apply一下哦
这样Java目录下的就可以建立Java源文件啦
第三步:好了 准备工作完成,下面正菜来啦
这是pom.xml配置文件里面的内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>war</packaging> <!--这些其实对项目没影响--> <name>ssm-test</name> <groupId>sunhs-ssm</groupId> <artifactId>ssm-test</artifactId> <version>1.0-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.7</version> <configuration> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>8888</port> <maxIdleTime>30000</maxIdleTime> </connector> </connectors> <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}</webAppSourceDirectory> <contextPath>/</contextPath> </configuration> </plugin> </plugins> </build> <properties> <!-- 设置项目编码编码 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- spring版本号 --> <spring.version>4.3.5.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.4.1</mybatis.version> </properties> <dependencies> <!--dependency> <groupId>sunhs-ssm</groupId> <artifactId>[the artifact id of the block to be mounted]</artifactId> <version>1.0-SNAPSHOT</version> </dependency--> <!-- java ee --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- 实现slf4j接口并整合 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.2</version> </dependency> <!-- JSON --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.7</version> </dependency> <!-- 数据库 --><!--如果你用的是Oracle的数据库,需要修改一下这里--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> <scope>runtime</scope> </dependency> <!-- 数据库连接池 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring整合包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </project>
在pom里面配置上这些之后 maven就会自己加载这些jar包了,这里需要一些时间,不过并不影响别的操作,这样可以避免令人心烦的jar包冲突问题, 这也是使用maven的方便之处
然后是jdbc.properties属性文件里面的内容,记得改成你自己的数据库
jdbc.driver=com.mysql.jdbc.Driver #数据库地址 jdbc.url=jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8 #用户名 jdbc.username=root #密码 jdbc.password=root
至于为什么在见面都加上jdbc. 是为了避免可能的冲突,这里这要和后面的配置对应好了就行,不一定就是jdbc.也可以是别的
然后是mybatis的一点配置 mybaits-config.xml
<?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"> <!-- 参考官网:http://www.mybatis.org/mybatis-3/zh/configuration.html#settings --> <configuration> <!-- 全局配置 --> <settings> <!-- 使用列标签代替列名 --> <setting name="useColumnLabel" value="true"/> <!--允许 JDBC 支持自动生成主键--> <setting name="useGeneratedKeys" value="false"/> <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration>
然后是配置一下web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Sunhs</display-name> <description>sunhs_0.0.1</description> <!-- 编码过滤器 --> <filter> <filter-name>encodingFilter</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>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置DispatcherServlet --> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置springMVC需要加载的配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 匹配所有请求,此处也可以配置成 *.do 形式 --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
好了,终于可以正式开始写代码啦
首先就是实体:Users.java
package com.sunhs.model;//实体的包有叫pojo、bean、entity、domain等等的 其实都一样啦 public class Users { private String userid; private String username; private String password; public Users() { } public Users(String userid, String username, String password) { this.userid = userid; this.username = username; this.password = password; }
这个......get和set就不粘了
好,现在是dao层 UserDao 其实这里只需要一个接口就可以,并不需要实现
import com.sunhs.model.Users; import java.util.List; public interface UserDao { int insertUser(Users users); int updateUser(Users users); int deleteUser(String userid); Users getUserByName(String username); List<Users> getUsers(); }
设计完dao层 相应的映射文件不要忘记哦
userDaoMapper.xml
<?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"> <!-- 设置为IUserDao接口方法提供sql语句配置 --> <mapper namespace="com.sunhs.dao.UserDao"><!--这里千万不要配置错误哦--> <select id="getUserByName" resultType="com.sunhs.model.Users" parameterType="String"> SELECT * FROM users WHERE username = #{username} </select> </mapper>
额....怎么好像少了好多???这里举个例子就好啦,其他的同样添加上去就好啦,需要注意的是,这里的id要对应在dao层设计的方法名,要保持一致,否则跑偏啦就会失败哦
然后在spring的配置文件中要配置一下dao
spring-dao.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- 导入外部的properties文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置数据源 使用的是c3p0数据源 --> <bean name="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}"/> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="10"/> <property name="autoCommitOnClose" value="false"/> <property name="checkoutTimeout" value="1000"/> <property name="acquireRetryAttempts" value="2"/> </bean> <!-- 配置mybatis的sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 配置数据库连接池 --> <property name="dataSource" ref="dataSource"/> <!-- 加载mybatis配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- 扫描domain下的实体,方便在mapper下的xml中使用别名,例如User则会找到me.jinkun.ssm.domain.User --> <property name="typeAliasesPackage" value="com.sunhs.model"/> <!-- 自动扫描mapper下的Xx.xml文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类并注入到Spring的容器中 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.sunhs.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> <!-- 自动扫描与装配dao--> <context:component-scan base-package="com.sunhs.dao"/> </beans>
个人喜欢把dao、service、controller的配置单独分开,这样显得更加清晰,当然放在同一个配置文件中也不会有任何问题的
到了这里就可以测试一下,dao层是否成功执行啦
UserDaoTest.java 这里千万要注意,测试类上一定要加上@RunWith注解和@ContextConfiguration注解,路径不要搞错哦,小心报空指针---小的就是在这里ka了好久,参照别人的好多也都没写 结果一直报空指针
package com.sunhs.dao; import com.sunhs.model.Users; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; import static org.junit.Assert.*; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:/spring/*.xml"}) public class UserDaoTest { @Resource private UserDao userDao; @Test public void getUserByName() throws Exception { Users users = userDao.getUserByName("sunhs"); System.out.println(users); } }
如果正确的输出数据,就说明没问题啦
dao层ok了,现在可以继续service层了
UserService.java 这里建议设置接口和实现类,方便后续
import com.sunhs.model.Users; import java.util.List; public interface UserService { int insertUser(Users users); int updateUser(Users users); int deleteUser(String userid); Users getUserByName(String username); List<Users> getUsers(); }
UserServiceImpl.java
package com.sunhs.service.impl; import com.sunhs.dao.UserDao; import com.sunhs.model.Users; import com.sunhs.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service("userService") public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public int insertUser(Users users) { return 0; } public int updateUser(Users users) { return 0; } public int deleteUser(String userid) { return 0; } public Users getUserByName(String username) { return userDao.getUserByName(username); }
然后在spring的配置文件中要配置一下service
spring-service.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd"> <!-- 扫描所有的Service --> <context:component-scan base-package="com.sunhs.service"/> <!-- 事务管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 基于注解的声明时事物 : 1、开发团队达成一致约定,明确标注事物的方法 2、保证事物方法的执行时间尽可能短 3、不是所有的方法都需要事物,如只有一条修改记录操作 --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
最好也配置一下log4j
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT"/> </root> </configuration>
好了,现在可以进行测试一下了
package com.sunhs.service.impl; import com.sunhs.model.Users; import com.sunhs.service.UserService; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; /** * Created by zjs on 2018/5/4. */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:/spring/*.xml"}) public class UserServiceImplTest { Logger mLogger = LoggerFactory.getLogger(this.getClass()); @Resource private UserService userService; @Test public void getUserByName() throws Exception { Users users =userService.getUserByName("sunhs"); System.out.println(users); } }
正确的数据数据,就ok,如下