发表于: 2018-10-20 09:53:50

1 376


今天完成的事情:

1.接口

先设计一个Hero类

public class Hero {
public String name;
   protected float hp;
}

然后写一个接口


public interface AD {
public void physicAttack();

}

然后再写出接口的实现类

public class ADHero extends Hero implements AD{

@Overrid     //复写标签,帮助自己检查是否正确的复写了父类中已有的方法

   public void physicAttack(){

System.out.println("进行物理攻击");
   }
}


2.对象转换

明确引用类型与对象类型的概念
在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad

public class Hero {
public String name;
   protected float hp;

   public static void main(String[] args) {

Hero h = new Hero();     //h引用的类型是Hero

       ADHero ad = new ADHero(); //把ad引用所指向的对象的类型是ADHero
                               

       //类型转换指的是把一个引用所指向的对象的类型,转换为另一个引用的类型
     
       //把ADHero当做Hero使用,一定可以

       h = ad;

   }
}

强制转换

package charactor;

       import charactor1.Support;

public class Hero {
public String name;
   protected float hp;

   public static void main(String[] args) {
Hero h =new Hero();
       ADHero ad = new ADHero();
       Support s =new Support();

       h = ad;   //这里的h指向的是ad对象
       ad = (ADHero) h;  //所以强制转换成ADHero是可以的
       h = s;       //这里的h指向的是Support对象
       ad = (ADHero)h;  //所以转换成ADHero类型会失败,这里强制转换会报出异常
   }

}


3.重写

写一个父类,提供effect的方法

public class Item {
String name;
   int price;

   public void buy(){
System.out.println("购买");
   }
public void effect() {
System.out.println("物品使用后,可以有效果");
   }

}

写一个子类,继承了父类中的属性,并提供了父类中的方法effect

public class LifePotion extends Item{//继承了父类中的属性

   public void effect(){ //提供了父类中的方法effect
       System.out.println("血瓶使用后,可以回血");
   }

}

调用这个方法,会执行子类中提供的方法而不是父类中提供的方法

public class Item {
String name;
   int price;

   public void effect(){ //调用重写的方法,就会执行重写的方法
       System.out.println("物品使用后,可以有效果");
   }

public static void main(String[] args) {
Item i = new Item();
       i.effect();

       LifePotion lp =new LifePotion();
       lp.effect();
   }

}


4.多态

操作符的多态

public class Hero {
public String name;
   protected float hp;

   public static void main(String[] args) {

int i = 5;
       int j = 6;
       int k = i+j; //如果+号两侧都是整型,那么+代表 数字相加

       System.out.println(k);

       int a = 5;
       String b = "5";

       String c = a+b; //如果+号两侧,任意一个是字符串,那么+代表字符串连接
       System.out.println(c);

   }

}


类的多态

都是同一个类型,调用同一个方法,却能呈现不同的状态

public class Item {
   String name;
   int price;

   public void buy(){
       System.out.println("购买");
   }
public void effect() {
       System.out.println("物品使用后,可以有效果 ");
   }

public static void main(String[] args) {
       Item i1= new LifePotion();
       Item i2 = new MagicPotion();
       System.out.print("i1  是Item类型,执行effect打印:");
       i1.effect();
       System.out.print("i2也是Item类型,执行effect打印:");

       i2.effect();

//打印出的结果是不同的

   }

}

i1继承了Item

public class LifePotion extends Item {
public void effect(){
System.out.println("血瓶使用后,可以回血");
   }
}

i2继承了ITem

public class MagicPotion extends Item{

public void effect(){
System.out.println("蓝瓶使用后,可以回魔法");
   }
}


5.JDBCtemplate

先写一个实体类

public class User {
private long Id;
   private String Name;
   private String Qq;

   public String getuName() { return Name; }
public void setuName(String name){this.Name=name;}
public String getuQq(){return Qq;}
public void setuQq(String qq){this.Qq=qq;}
public long getuId(){return Id;}
public void setuId(long id){this.Id=id;}

}

然后写一个接口并与实体类对应

public interface UserDao {
public void addUser(User user);
   public void deleteUser(int id);
   public void updateUser(User user);
   public String searchUserName(int id);
   public User searchUser(int id);
   public List<User> findAll();
}

写出接口的实现类

public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
public void addUser(User user) {
String sql = "insert into student values(null,?,?)";
//        System.out.println(user.getuName());
       this.getJdbcTemplate().update(sql, user.getuName(),
               user.getuQq());
   }

public void deleteUser(int id) {
String sql = "delete from student where id=?";
       this.getJdbcTemplate().update(sql, id);

   }

public void updateUser(User user) {
String sql = "update student set name=?,qq=? where id=?";
       this.getJdbcTemplate().update(sql, user.getuName(),
               user.getuQq(), user.getuId());
   }

public String searchUserName(int id) {// 简单查询,按照ID查询,返回字符串
       String sql = "select name from student where id=?";
       // 返回类型为String(String.class)
       return this.getJdbcTemplate().queryForObject(sql, String.class, id);

   }

public List<User> findAll() {// 复杂查询返回List集合
       String sql = "select * from student";
       return this.getJdbcTemplate().query(sql, new UserRowMapper());

   }

public User searchUser(int id) {
String sql="select * from student where id=?";
       return this.getJdbcTemplate().queryForObject(sql, new UserRowMapper(), id);
   }

class UserRowMapper implements RowMapper<User> {
//rs为返回结果集,以每行为单位封装着
       public User mapRow(ResultSet rs, int rowNum) throws SQLException {

User user = new User();
           user.setuId(rs.getInt("id"));
           user.setuName(rs.getString("username"));
           user.setuQq(rs.getString("password"));
           return user;
       }

}
}

配置applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:p="http://www.springframework.org/schema/p"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
       <property name="url" value="jdbc:mysql://127.0.0.1:3306/task?characterEncoding=UTF-8"></property>
       <property name="username" value="root"></property>
       <property name="password" value="5525"></property>
   </bean>

   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource"></property>
   </bean>

   <bean id="userDao" class="impl.UserDaoImpl">
       <property name="jdbcTemplate" ref="jdbcTemplate"></property>
   </bean>

</beans>


然后写出测试类测试实现类

public class UserTest {
@Test//增
   public void deom1(){
User user=new User();
       user.setuId(300);
       user.setuName("魏小威");
       user.setuQq("5558");

       ApplicationContext applicationContext=new
               ClassPathXmlApplicationContext("applicationContext.xml");
       UserDao dao=(UserDao) applicationContext.getBean("userDao");
       dao.addUser(user);
   }

@Test//改
   public void demo2(){
User user=new User();
       user.setuId(300);
       user.setuName("王艳");
       user.setuQq("123456789");

       ApplicationContext applicationContext=new
               ClassPathXmlApplicationContext("applicationContext.xml");
       UserDao dao=(UserDao) applicationContext.getBean("userDao");
       dao.updateUser(user);
   }

@Test//删
   public void demo3(){
ApplicationContext applicationContext=new
               ClassPathXmlApplicationContext("applicationContext.xml");
       UserDao dao=(UserDao) applicationContext.getBean("userDao");
       dao.deleteUser(301);
   }

@Test//查
   public void demo4(){
ApplicationContext applicationContext=new
               ClassPathXmlApplicationContext("applicationContext.xml");
       UserDao dao=(UserDao) applicationContext.getBean("userDao");
       String name=dao.searchUserName(10);
       System.out.println(name);
   }
}


6.mybatis


MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。


先写一个实体类

public class Student {
private int id;
   private String name;
   private String qq;

   public int getId() {
return id;
   }

public void setId(int id) {
this.id = id;
   }

public String getName() {
return name;
   }

public void setName(String name) {
this.name = name;
   }

public String getQq() {
return qq;
   }

public void setQq(String qq) {
this.qq = qq;
   }


配置mybatis-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">
<configuration>

   <typeAliases>
       <package name="pojo"/>
   </typeAliases>
   <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://127.0.0.1:3306/task?characterEncoding=UTF-8"/>
               <property name="username" value="root"/>
               <property name="password" value="5525"/>
           </dataSource>
       </environment>
   </environments>

   <mappers>
       <mapper resource="mapper/Student.xml"/>
   </mappers>
</configuration>


创建实体类的mapper.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="pojo.Student">
   <select id="listStudent" resultType="pojo.Student">
       select * from student
</select>

   <insert id="addStudent" parameterType="pojo.Student">
       insert into student (name,qq) values (#{name},#{qq})
</insert>

   <delete id="deleteStudent" parameterType="pojo.Student">
       delete from student where id=#{id}
</delete>

   <update id="updateStudent" parameterType="Student">
       update student set name = #{name },qq=#{qq} where id=#{id}
</update>

   <select id="getStudent" parameterType="int"  resultType="pojo.Student">
       select *from student where id=#{id}
</select>



</mapper>


写一个测试类

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestStudent {
public static void main(String[] args)throws IOException{

String resource="mybatis-config.xml";
       InputStream inputStream=Resources.getResourceAsStream(resource);
       SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
       SqlSession session=sqlSessionFactory.openSession();
      //增
       Student s =new Student();
       s.setName("尽快");
       s.setQq("88888886");
       session.insert("addStudent",s);



       //删
       s.setId(11);
       session.delete("deleteStudent",s);




       //改
       Student s1 =session.selectOne("getStudent",10);
       s1.setName("在项城");
       s1.setQq("111110000");
       session.update("updateStudent",s1);

       //查
       Student s2 =session.selectOne("getStudent",7);
       System.out.println(s2.getName());

//        listAll(session);
       session.commit();
       session.close();


       }

private static void listAll(SqlSession session) {
List<Student> ss=session.selectList("listStudent");
       for(Student s :ss) {
System.out.println(s.getId()+"---"+s.getName()+"---"+s.getQq());

       }
}
}

输出

增删改查均执行成功


明天计划的事情:

学习spring+mybatis





遇到的问题:



配置文件beans标签报红

异常源码Element 'beans' cannot have character [children], because the type's content type is element-only.//Spring在初始化的时候无法识别applicationContext.xml中的元素。

错误原因

在网上拷贝代码时,有tab或者空格导致格式错误,Spring无法识别。

解决方法

把代码重新手敲一遍


在执行更新操作时报出

Mapped Statements collection does not contain value for getStudent

映射语句合集不包含getStudent

不能执行更新操作

错误原因实体类的映射文件没有getStudent方法

解决方法

在映射文件中加入getStudent方法


收获

1.遇到问题要理性的思考,找到出错的位置,一步一步的去解决,解决完后理清思路,想一下为什么会出错

2.注意代码不能输错


返回列表 返回列表
评论

    分享到