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配置如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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>
其中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关闭.参照忠哥的代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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; }
但是这样每个方法里都写了获取session,获得IUserMapper,关闭session,捕获异常,感觉这些代码重复了。
4、运行项目,使用debug模式进行调试
F5:进入方法
F6:向下逐行调试
F7:跳出方法
F8:直接跳转到下一个断点
5、play框架让我感兴趣的地方是controller中可以直接获取view中的属性,而只需要controller中action方法的参数名和view中的属性名称相同即可。而我之前不明白的时候是用 params.get("name")来获取的。后来发现可以直接获取,感觉好神奇
6、编程要规范,注释要写清楚,不然到时候自己都不知道啥意思了,感谢忠哥的demo,看起来很舒服