发表于: 2018-03-25 23:25:15

1 409


private int id;
private String userName;
private String password;
private String sex;
public User() {
}

解读:public是权限修饰符,在它之下,还有protected,default,private。protected ,default,private。

private这是类里面对属性的封装。id,userName,password,sex是四个属性,int,String是数据类型。public User(){}是构造器。我用private封装我的属性,这样类外面读取不到,但是我用public公开方法,方便外部类的调用。default是包里面可以调用,protected是包里面和子类也可以调用。

public interface UserDao {
// public User getUser(User user);
       public List<User> getUser();
   public void addUser(User user);
    public int updateUser(User user);
    public void deleteUser(int id);
}

public List<User> gerUser();

public void addUser(User user);

public void updateUser(User user);

public void deleteUser(int id);

接口里面四个方法都是抽象方法,因为没有方法体。第一个括号里面没有参数,是因为它对应的SQL语句是select * from user,不需要参数,查询的是整个表。删除方法里面的参数是int id,是因为对应的SQL语句是delete from user where id = #{id}

addUser 方法里面的参数是(User user),是因为我的SQL语句涉及到了所有的属性,只能用user代替,而user的数据类型可以理解成User类。

解读任务一xml,spring配置

<!-- 自动扫描 -->

  <context:component-scan base-package="com.ptteng.dao"/>


   <!-- 配置数据源 datasource就是数据源,DriverManagerDataSource驱动程序管理器数据源-->
   <bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
       <property name="url" value="jdbc:mysql://localhost:3306/springmybaitis"/>
       <property name="username" value="root"/>
       <property name="password" value="1234"/>
   </bean>

   <!--sql会话工厂-->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="dataSource" ref="jdbcDataSource"/>
       <property name="configLocation" value="classpath:mybatis-config.xml"/>
   </bean>

   <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
       <property name="mapperInterface" value="com.ptteng.dao.UserDao"/>
       <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
   </bean>
</beans>

自动扫描哪里,其实不用加一个扫描dao的,因为dao不用扫描。service才需要扫描,@service一般会加在service类里面,主类的上面一行。  property是性质性能的意思

Session是会话的意思;configLocation是配置位置的意思,后面的value就是类似于路径,这段话的作用就是把数据源和mybatis-config整合起来。ref是参考的意思,至于为什么上面用class,中间用ref,下面用value,我也不知道。因为jdbcDatasource涉及到bean,所以就用ref

后面的目的就是把UserDao和sqlSessionFactory整合起来,SQLSessionFactory又把mybatis-config和数据源整合起来了,而mybatis-config里面又包含了UserDao.xml文件,见下图,总之,配置文件的目的,就是把这么一大波都整合为一体

我用jdbcDatesource和mybatis-config为原料生产出了sqlSessionFactory。下面我有用sqlSessionFactory叫UserDao为原料生产出了userDao,然后把userDao丢到程序里运行,可以这么理解:这个生产好userDao,就是自动装配private UserDao userDao这个后面小写的userDao。

 <configuration>
   <mappers>
     <mapper resource="UserDao.xml"/>
 </mappers>
</configuration>
<mapper namespace="com.ptteng.dao.UserDao">
<select id="getUser" resultType="com.ptteng.model.User">
   SELECT * FROM user
</select>
<insert id="addUser" parameterType="com.ptteng.model.User" flushCache="true">
  INSERT INTO user (id,userName,password,sex) VALUES (#{id},#{userName},#{password},#{sex})
</insert>
<update id="updateUser" parameterType="com.ptteng.model.User">
   UPDATE user SET password=#{password} ,userName=#{userName},sex=#{sex} WHERE id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
   DELETE FROM user WHERE id=#{id}
</delete>
</mapper>

namespace就是命名空间,当然要找到UserDao类啊。

涉及到属性的就用参数类型,涉及到所有参数,就指向User;涉及到一个参数,就指向int或者string

@ContextConfiguration环境配置,位置指向类路径spring配置文件

@ContextConfiguration(locations = {"classpath:ApplicationContext.xml"})

@RunWith(SpringJUnit4ClassRunner.class)//运行环境,在spring环境下运行junit4测试。
public class UserController {

@Autowired//自动装配,装配了下面的userDao。

   private UserDao userDao;//限制符号,上面是default,然后是protected,public。代表开放尺度越来越大  

//代表用log4j输出报错,测试结果,打出日志。级别四个,

//分别是debug,info,error,warn 

 Logger logger = Logger.getLogger(UserController.class);


   //    根据姓名查询
   @Test
   public void getUserTest() {
List<User> user = userDao.getUser();
       //logger.debug("查找结果" + user);
       System.out.println(user);
   }

List<User> users = userDao.getUser();

System.out.pritln(users)

@Test
public void deleteUserById() {
userDao.deleteUser(9);
}
@Test
public void updateUserTest() {
User user = new User();
   user.setId(2);
   user.setSex("");
   user.setUserName("吼哈哈妈");
   user.setPassword("11113");
   userDao.updateUser(user);
   System.out.println(user);

}

User user = new User();

user.setId(10);

user.setName("");

user.setPassword("");

user.setSex("");

userDao.updateUser(user);

System.out.pritln(user);

@Test

public void addUserTest() {
User user = new User();
   user.setId(4);
   user.setSex("");
   user.setUserName("刘飞");
   user.setPassword("5856");
   userDao.addUser(user);
   System.out.println(user);


}

发生了一件事儿,居然只能输出姓名和密码,不能输出性别,查了之后才发现原来to String里面,没有进行sex的tostring方法。

重新做了getter和setter方法,就可以了


明天的计划:考核任务一

遇到的问题:暂无

今天的收获:对任务一加深了理解

java任务二开始时间:2018.01.25

预计demo时间:2018.02.12

可能有延期风险,原因是:json看不懂,控制器的逻辑看不懂,所以又回看了java语法

禅道链接地址:http://task.ptteng.com/zentao/project-task-501.html 



返回列表 返回列表
评论

    分享到