Spring-MVC第二弹数据库链接

Spring-MVC第一弹简单项目搭建
Spring-MVC第二弹数据库链接

spring_mvc和mybatis jar包下载

数据库链接以及dao层和service层编写

数据库链接需要的jar包:
mybatis-3.4.1.jar
mybatis-spring-1.3.0.jar
mysql-connector-java-5.1.20.jar(最新的6.x链接出问题)
commons-dbcp-1.4.jar
commons-pool-1.6.jar

spring-jdbc-4.3.2.RELEASE.jar(自动下载spring-tx-4.3.2.RELEASE.jar)

pom.xml 中添加如下配置

<!-- mysql数据库配置 需要的jar -->

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.20</version>
        </dependency>
        <!-- mysql数据库配置 需要的jar -->

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- 数据库连接池dbcp 需要的jar -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.6</version>
        </dependency>

        <!-- 数据库连接池dbcp 需要的jar -->

这里写图片描述

配置数据库链接
spring-servlet.xml
1,配置dao层和service层
2,配置数据库链接(用户名,密码,驱动,url)
3,配置sqlSessionFactory
4,配置mapper映射器

<!-- 扫描指定包,注意包名写法 及 use-default-filters="false" -->
    <context:component-scan base-package="com.axure.web">
        <context:include-filter type="annotation"
            expression="org.springframework.stereotype.Controller" />
        <context:include-filter type="annotation"
            expression="org.springframework.stereotype.Service" />
    </context:component-scan>


<!-- dbcp数据源配置 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/leying?useUnicode=yes&amp;characterEncoding=utf-8" />
        <property name="username" value="root" />
        <property name="password" value="123456" />

        <!-- 池启动时创建的连接数量 -->
        <property name="initialSize" value="5" />
        <!-- 同一时间可以从池分配的最多连接数量。设置为0时表示无限制。 -->
        <property name="maxActive" value="30" />
        <!-- 池里不会被释放的最多空闲连接数量。设置为0时表示无限制。 -->
        <property name="maxIdle" value="20" />
        <!-- 在不新建连接的条件下,池中保持空闲的最少连接数。 -->
        <property name="minIdle" value="3" />
        <!-- 设置自动回收超时连接 -->
        <property name="removeAbandoned" value="true" />
        <!-- 自动回收超时时间(以秒数为单位) -->
        <property name="removeAbandonedTimeout" value="200" />
        <!-- 设置在自动回收超时连接的时候打印连接的超时错误 -->
        <property name="logAbandoned" value="true" />
        <!-- 等待超时以毫秒为单位,在抛出异常之前,池等待连接被回收的最长时间(当没有可用连接时)。设置为-1表示无限等待。 -->
        <property name="maxWait" value="100" />

    </bean>

<!-- 创建SqlSessionFactory,同时指定数据源 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:/mybatis/mybatis-config.xml" />
        <property name="mapperLocations" value="classpath:/mybatis/sqlmapping/**/*.xml" />
    </bean>

<!-- 创建数据映射器,数据映射器必须为接口 ,可以把扫描到的Mapper接口变成Mapper对象 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定要扫描包: 多个包用逗号隔开 -->
        <property name="basePackage" value="com.axure.web.dao" />
        <!--指定sqlSessionFactory -->
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>

mapper文件编写
UserInfoMapper.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" >
<mapper namespace="com.axure.web.dao.UserInfoDao">
    <resultMap id="BaseResultMap" type="com.axure.entity.User">
        <id column="userId" property="userId" jdbcType="INTEGER" />
        <result column="userName" property="userName" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
        <result column="realName" property="realName" jdbcType="VARCHAR" />
    </resultMap>

    <!-- 添加用户信息 -->
    <insert id="register" keyProperty="userId" parameterType="com.axure.entity.User">
        insert into user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <!-- <if test="userId != null">userId,</if> -->
            <if test="userName != null">userName,</if>
            <if test="password != null">password,</if>
            <if test="realName != null">realName,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <!-- <if test="userId != null"> #{userId,jdbcType=INTEGER}, </if> -->
            <if test="userName != null">
                #{userName,jdbcType=VARCHAR},
            </if>
            <if test="password != null">
                #{password,jdbcType=VARCHAR},
            </if>
            <if test="realName != null">
                #{realName,jdbcType=VARCHAR},
            </if>
        </trim>

    </insert>
    <!-- 查询用户信息 通过用户id -->

    <select id="getUserInfoById" resultMap="BaseResultMap"
        parameterType="int">
        select * from user where userId = #{id}
    </select>

    <!-- 查询用户信息 通过用户名称 -->
    <select id="getUserInfoByUserName" resultMap="BaseResultMap"
        parameterType="string">
        select * from user where userName = #{userName}
    </select>


    <!-- 更新用户信息 -->
    <update id="updateUserInfo" parameterType="com.axure.entity.User">
        update user
        <set>
            <if test="userName != null">
                userName = #{userName,jdbcType=VARCHAR},
            </if>
            <if test="password != null">
                password = #{password,jdbcType=VARCHAR},
            </if>
            <if test="realName != null">
                realName = #{realName,jdbcType=VARCHAR},
            </if>
        </set>
        where userId = #{userId,jdbcType=INTEGER}
    </update>


</mapper>

dao中的方法名称和mapper中的一一对应

service属于业务逻辑,灵活处理
这里写图片描述

dao中的UserInfoDao 接口

public interface UserInfoDao {
    User getUserInfoById(int id);
    User getUserInfoByUserName(String userName);
    void updateUserInfo(User userInfo);
    int register(User userInfo);
}

Service中的UserInfoService 接口及实现类

public interface UserInfoService {

    User getUserInfoById(int id);
    User getUserInfoByUserName(String userName);
    void updateUserInfo(User userInfo);
    int register(User userInfo);

}

实现类:自动注入UserInfoDao对象

@Service("userInfoService")
public class UserInfoServiceImpl implements UserInfoService{

    @Autowired
    UserInfoDao userInfoDao;

    public User getUserInfoById(int id) {
        return userInfoDao.getUserInfoById(id);
    }
    public User getUserInfoByUserName(String userName) {
        return userInfoDao.getUserInfoByUserName(userName);
    }

    public void updateUserInfo(User userInfo) {
        userInfoDao.updateUserInfo(userInfo);
    }

    public int register(User userInfo) {
        return userInfoDao.register(userInfo);
    }



}

Controller控制器

@Controller
@RequestMapping("/user")
public class LoginController {

    @Autowired
    private UserInfoService userInfoService;

    /**
     * app 接口访问直接返回json数据
     * 
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/json", method = RequestMethod.GET)
    public String returnJSON() {
        System.out.println("==========");
        return "index" + new Random().nextInt(100);
    }

    @ResponseBody
    @RequestMapping(value = "/register", method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"})
    public String register(
                @RequestParam(value = "userName",required=true) String userName,
                @RequestParam(value = "password",required=true) String password,
                @RequestParam(value = "realName",required=false) String realName){
        User user = userInfoService.getUserInfoByUserName(userName);
        if (user!=null) {
            System.out.println("register  ===== 用户已经存在====="+user);
            return "该用户名已经存在";
        }
        User userInfo = new User(userName,password,realName);
        System.out.println("register  =====dao ====="+userInfo);
        int regResult = userInfoService.register(userInfo);
        if (regResult==1) {
            return "注册成功" + "regResult = " + regResult;
        }
        return "注册失败";
    }


    /**
     * pc or wap 返回 ModelAndView<br>
     * 如果jsp页面是在WEB-INF下,返回controller对应的路径。如果是这样用户无法直接访问对应的jsp页面
     * 
     * @param user
     * @return
     */
    @RequestMapping(value = "/register2", method = RequestMethod.GET)
    public ModelAndView register2(User user) {
        System.out.println("====register==jsp ===user = " + user);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("user/loginSuccess");
        mv.addObject("user", user);
        return mv;
    }

    @ResponseBody
    @RequestMapping(value = "/getuserInfo", method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"})
    public String getUserInfoById(@RequestParam(value = "userId",required=true) int userId) {
        System.out.println("====getuserInfo=====user = userId"+ userId);
        User user = userInfoService.getUserInfoById(userId);
        System.out.println("====getuserInfo=====user = userId"+ userId +"  " + user);
        return user.toString();
    }
}

创建数据库和表的sql语句

 create database if not exists leying;
 use leying;
CREATE TABLE user
(
userId   int AUTO_INCREMENT PRIMARY KEY,
userName varchar(255),
password varchar(255),
realName varchar(255)
) CHARACTER SET utf8 COLLATE utf8_general_ci AUTO_INCREMENT=0;

INSERT INTO user(userName,password,realName) VALUES ('heaven','123','hyc');  

效果图:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值