Play框架熟悉

1、将Play项目部署到Eclipse中

  在项目路径下DOS窗口中,输入Play eclipsify,然后再File  import到项目中.

  在整合Mybatis时候,需要以下的依赖

  - play 1.2.4
  - play -> mybatisplay 0.3.0
  - org.mybatis -> mybatis 3.2.8

  这个可以先在项目路径下输入Play dependencies,然后再play eclipsify,再在eclipse中刷新。

2、整合mybatis的时候,还需要配置数据库,这里连接mysql数据库,在application.conf 添加

  db.url=jdbc:mysql://localhost:3306/test
  db.driver=com.mysql.jdbc.Driver
  db.user=admin
  db.pass=root

  并且还需要告诉机器mybatis的配置文件从哪里加载:mybatis.configuration=mybatis/configuration.xml。一般自己添加的文件写在文档的最后面,方便查看

  这句话就说明了从mybatis文件夹下的configuration.xml

mybatis文件夹下的configuration.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">

<configuration>
    <typeAliases>
        <typeAlias type="models.User" alias="User" />
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${user}" />
                <property name="password" value="${pass}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="dao/xmls/UserMapper.xml" />
    </mappers>
</configuration>
configuration.xml

其中value="${driver}" 将会加载application.conf中的driver

configuration.xml文件中

<typeAliases>
  <typeAlias type="models.User" alias="User" />
</typeAliases>

指定了别名

<mappers>
  <mapper resource="dao/xmls/UserMapper.xml" />
</mappers>

指定映射路径,根据这个,将会映射到dao/xmls/UserMapper.xml文件,其中部分代码

<select id="selectOne" resultMap="userRM" parameterType="map">
    SELECT
    id,username,password FROM user
    WHERE username=#{name} AND
    password=#{pwd} ;
</select>

在传值的过程中,我没有搞清楚其中的 #{name}指的是哪一个,虽然知道是传过来的值,但是由于我的参数类型设置为Map类型,那么传过来的值则对应为map的键,这里就意味着map中放置的键为 name 和 pwd.

3、在进行登录验证的时候,或者注册的时候,都需要用到session,可以通过 SqlSession session = IbatisSessionFactory.get().openSession(false) 来获取session,false表示不自动提交.

因为经常需要用到session,所以我之前把获取session写在一个方法里面,还好忠哥告诉我,那样写会有很大的隐患,因为我既没有捕获异常,回滚事务,也没有将session关闭.参照忠哥的代码如下:

    public User getByNameAndPassword(String username, String password) {
        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
            // 若查询条件为空,则返回为空
            return null;
        }
        // 有查询条件,则继续查询
        User user = null;
        SqlSession session = IbatisSessionFactory.get().openSession(false);

        Map<String, Object> params = new HashMap<String, Object>();
        params.put("name", username);
        params.put("pwd", password);
        try {
            IUserMapper mapper = session.getMapper(IUserMapper.class);
            user = mapper.selectOne(params);
        } catch (Exception e) {
            // 进行回滚
            session.rollback(true);
        } finally {
            session.close();
        }
        return user;
    }
View Code

但是这样每个方法里都写了获取session,获得IUserMapper,关闭session,捕获异常,感觉这些代码重复了。

4、运行项目,使用debug模式进行调试

F5:进入方法
F6:向下逐行调试
F7:跳出方法
F8:直接跳转到下一个断点

5、play框架让我感兴趣的地方是controller中可以直接获取view中的属性,而只需要controller中action方法的参数名和view中的属性名称相同即可。而我之前不明白的时候是用 params.get("name")来获取的。后来发现可以直接获取,感觉好神奇

6、编程要规范,注释要写清楚,不然到时候自己都不知道啥意思了,感谢忠哥的demo,看起来很舒服

posted @ 2015-02-27 16:55  genpys  阅读(344)  评论(0编辑  收藏  举报